Promise를 기반으로 하는 다양하고 현대적이며 가벼운 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를 통해 원활하게 실행될 수 있습니다. 새 인스턴스를 생성하고 원하는 URL로 get
sugar 메소드를 호출하기만 하면 됩니다. 이 호출은 응답 본문, 상태 및 헤더에 쉽게 액세스할 수 있는 Awi의 Response
인터페이스 인스턴스를 반환합니다.
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는 또한 악명 높은 .then(res => res.body)
Promise 콜백의 반복을 피하기 위해 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<T>
로 반환하는 optional
도우미를 갖게 되었습니다.
이 도우미는 기본적으로
GET
요청을 보냅니다. 다른 요청 방법을 사용하려면 인터셉터를 사용하여 방법을 지정해야 합니다.
또한 네트워크 문제나 잘못된 구성으로 인해 요청이 실패하는 경우에도 Promise는 거부됩니다.
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에서 영감을 받은 Awi는 요청 객체를 수정하는 비동기 콜백을 허용하는 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 ) )
요청 개체에서 수정할 수 있는 모든 속성은 Awi의 API 참조에서 사용할 수 있습니다.
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를 확장하거나 요청 템플릿을 생성하는 간단한 방법을 제공합니다.
보시다시피 인터셉터 개념은 매우 훌륭하고 재사용 가능한 방식으로 애플리케이션에 대한 요청 템플릿을 생성하는 방법을 제공합니다. 이는 승인된 요청을 할 때 특히 유용할 수 있습니다.
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는 오픈 소스이기도 하므로 생활을 더 쉽게 만들어 주는 기능이 누락되어 있다면 자유롭게 기여해 주세요.
인터셉터 패턴은 e2e 테스트를 위한 모의 서버를 만드는 데에도 사용되는 Koa에서 크게 영감을 받았습니다.
웹과 노드 모두에 대한 실행기 구현은 다름 아닌 axios에서 영감을 받았습니다.
MIT