ไคลเอนต์ http อเนกประสงค์ ทันสมัย และน้ำหนักเบาตามคำมั่นสัญญา
npm i -S awi
< script src =" https://cdn.jsdelivr.net/npm/awi/dist/awi.js " > </ script >
โหนด | โครเมียม | ขอบ | ไฟร์ฟอกซ์ | โอเปร่า | ซาฟารี |
---|---|---|---|---|---|
6.13.0 | 52 | 17 | 29 | 19 | 10 |
คำขอขั้นพื้นฐานที่สุดสามารถดำเนินการได้อย่างราบรื่นด้วย Awi เพียงสร้างอินสแตนซ์ใหม่และเรียกใช้เมธอด get
sugar ด้วย URL ที่ต้องการ การเรียกนี้จะส่งคืนอินสแตนซ์ของ Response
ของ Awi ที่สามารถเข้าถึงเนื้อหาการตอบกลับ สถานะ และส่วนหัวได้อย่างง่ายดาย
import { Awi , Response } from 'awi'
const response : Response = await new Awi ( )
. get ( 'http://server.api/todos' )
console . assert ( typeof response . body === 'object' )
console . assert ( typeof response . headers === 'object' )
console . assert ( response . status === 200 )
Awi ใช้งานได้ดีที่สุดเมื่อใช้ใน TypeScript เนื่องจากคุณสามารถพิมพ์คำแนะนำการตอบกลับทั้งหมด และรับการตรวจสอบประเภทและการเติมข้อความอัตโนมัติที่ดีจาก IDE ของคุณ
import { Awi , Response } from 'awi'
interface TodoResponse extends Response {
body : { title : string , completed : boolean }
}
const response : Response = await new Awi ( )
. get < TodoResponse > ( 'http://server.api/todos/1' )
console . assert ( typeof response . body . title === 'string' )
console . assert ( typeof response . body . completed === 'boolean' )
Awi ให้น้ำตาลไวยากรณ์สำหรับวิธีการร้องขอพื้นฐานทั้งหมด ตัวช่วย POST
, PUT
และ PATCH
เลือกใช้เนื้อหาของคำขอเป็นอาร์กิวเมนต์ที่สอง
import { Awi , Response } from 'awi'
const response : Response = await new Awi ( )
. post ( 'http://server.api/todos' , { title : 'Start using Awi.' , completed : true } )
console . assert ( response . status === 201 )
เมื่อได้รับสถานะการตอบกลับมากกว่า 400 รายการ Awi จะปฏิเสธสัญญาโดยอัตโนมัติ ดังนั้นคุณจึงไม่ต้องตรวจสอบสถานะการตอบกลับตามอำเภอใจผ่านคำสั่ง if
import { Awi } from 'awi'
await new Awi ( )
. post ( 'http://server.api/todos' , { completed : false } )
. catch ( response => console . assert ( response . status === 422 ) )
Awi ยังมีตัวช่วย body
เพื่อหลีกเลี่ยงการโทรกลับตามสัญญา .then(res => res.body)
ที่น่าอับอายซ้ำๆ ตัวช่วยนี้ยอมรับประเภททั่วไปเพื่อพิมพ์คำใบ้เนื้อหาการตอบกลับ
โปรดทราบว่าตัวช่วยนี้ส่งคำขอ
GET
ตามค่าเริ่มต้น หากคุณต้องการใช้วิธีการร้องขออื่น จะต้องระบุวิธีการนั้นโดยใช้ตัวสกัดกั้น
โปรดทราบว่าหากสัญญาถูกปฏิเสธ ออบเจ็กต์การตอบกลับทั้งหมดจะถูกส่งคืน
import { Awi } from 'awi'
interface Todo {
title : string
completed : boolean
}
const todo : Todo = await new Awi ( )
. body < Todo > ( 'http://server.api/todos/1' )
console . assert ( typeof todo . title === 'string' )
console . assert ( typeof todo . completed === 'boolean' )
ต้องขอบคุณ @bausano และแพ็คเกจโครงสร้างข้อมูลที่ยอดเยี่ยมของเขา Awi มีตัวช่วย optional
ที่ส่งคืนเนื้อหาของการตอบกลับเป็น Optional<T>
แทนที่จะปฏิเสธสัญญา
โปรดทราบว่าตัวช่วยนี้ส่งคำขอ
GET
ตามค่าเริ่มต้น หากคุณต้องการใช้วิธีการร้องขออื่น จะต้องระบุวิธีการนั้นโดยใช้ตัวสกัดกั้น
โปรดทราบว่าหากคำขอล้มเหลวเนื่องจากปัญหาเครือข่ายหรือการกำหนดค่าผิดพลาด สัญญาดังกล่าวยังคงถูกปฏิเสธ
import { Awi , Optional } from 'awi'
interface Todo {
title : string
completed : boolean
}
const todo : Optional < Todo > = await new Awi ( )
. optional < Todo > ( 'http://server.api/todos/1' )
console . assert ( todo instanceof Optional )
ผู้ขัดขวางคำขอคือสิ่งที่ทำให้อาวีโดดเด่น Awi ได้รับแรงบันดาลใจจาก Koa โดยจัดเตรียมวิธี use
ที่ยอมรับการเรียกกลับแบบอะซิงโครนัสที่แก้ไขออบเจ็กต์คำขอ
import { Awi , Response } from 'awi'
const response : Response = await new Awi ( )
. use ( async req => req . base = 'http://server.api' )
. use ( async req => req . path = 'todos' )
. get ( )
console . assert ( response . status === 200 ) )
คุณสมบัติทั้งหมดที่สามารถแก้ไขได้บนออบเจ็กต์คำขอมีอยู่ในข้อมูลอ้างอิง API ของ Awi
ทุกคำขอใน Awi ถูกกำหนดไว้โดยไม่ซ้ำกันโดยอาร์เรย์ของตัวสกัดกั้นที่กำหนดให้กับคำขอ วิธีการช่วยเหลือทั้งหมดของ Awi นั้นไม่มีอะไรมากไปกว่าการมอบหมายผู้สกัดกั้น คำขอทั้งหมดสามารถส่งได้โดยไม่ต้องใช้ตัวช่วยผ่านวิธี send
import { Awi , Method , Response } from 'awi'
const response : Response = await new Awi ( )
. use ( async req => req . base = 'http://server.api' )
. use ( async req => req . path = 'todos' )
. use ( async req => req . method = Method . GET )
. send ( )
console . assert ( response . status === 200 ) )
แม้ว่าวิธีนี้จะค่อนข้างยาวและการใช้ตัวช่วยก็สะอาดกว่ามาก แต่ก็ให้วิธีที่ตรงไปตรงมาในการขยาย Awi และ/หรือสร้างเทมเพลตคำขอ
อย่างที่คุณเห็น แนวคิด interceptor มอบวิธีสร้างเทมเพลตคำขอสำหรับแอปพลิเคชันของคุณด้วยวิธีที่ดีและสามารถนำกลับมาใช้ใหม่ได้ สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อทำการร้องขอที่ได้รับอนุญาต
import { Awi , Response } from 'awi'
// Define the template to be reused.
const auth = ( ) => new Awi ( )
. use ( async req => req . base = 'http://server.api' )
. use ( async req => req . headers [ 'authorization' ] = `Bearer ${ localStorage . token } ` )
// Use the template and provide further parameters.
const response : Response = await auth ( )
. get ( 'user' )
console . assert ( response . status === 200 ) )
ฟังก์ชั่นทั้งหมดของ Awi ได้รับการสรุปไว้ในหน้าวิกิ
มันมีน้ำหนักเบา
ขนาดไฟล์ที่ย่อเล็กสุดคือ 12kB และเราไม่ได้ตั้งใจจะทำให้ใหญ่ขึ้น!
มันถูกออกแบบมาสำหรับนักพัฒนา โดยนักพัฒนา
การร้องขอ http เป็นสิ่งที่นักพัฒนาทุกคนต้องทำทุกวัน โดยเฉพาะอย่างยิ่งเมื่อพูดถึง TypeScript หรือ JavaScript Awi มีฐานโค้ดที่เรียบร้อย มีการพิมพ์อย่างเคร่งครัด และเราตั้งใจทิ้งบล็อกเอกสารไว้ในไฟล์ที่สร้างขึ้น - ด้วยวิธีนี้ คุณสามารถอ่านว่าแต่ละวิธีทำอะไรได้บ้าง เพียงแค่กด Ctrl-คลิก ที่มัน!
มันมีความยืดหยุ่น
คุณสามารถเลือกใช้วิธีการง่ายๆ และใช้ตัวช่วยในตัวของ Awi เพื่อดำเนินการคำขอ HTTP ของคุณแบบซับเดียว หรือคุณสามารถกำหนดและแยกเทมเพลตที่นำมาใช้ซ้ำได้สำหรับคำขอของคุณตั้งแต่เริ่มต้น!
Awi ยังเป็นโอเพ่นซอร์ส ดังนั้น หากคุณพลาดฟีเจอร์ที่จะทำให้ชีวิตของคุณง่ายขึ้น อย่าลังเลที่จะมีส่วนร่วม
รูปแบบ Interceptor ได้รับแรงบันดาลใจอย่างมากจาก Koa ซึ่งใช้เพื่อสร้างเซิร์ฟเวอร์จำลองสำหรับการทดสอบ e2e ของเรา
การใช้งานตัวดำเนินการสำหรับทั้งเว็บและโหนดได้รับแรงบันดาลใจจากสิ่งอื่นใดนอกจาก axios
เอ็มไอที