Promise に基づいた、多用途でモダンな軽量の http クライアント。
npm i -S awi
< script src =" https://cdn.jsdelivr.net/npm/awi/dist/awi.js " > </ script >
ノード | クロム | 角 | Firefox | オペラ | サファリ |
---|---|---|---|---|---|
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 は、すべての応答をタイプヒントで示し、IDE から型チェックと優れたオートコンプリートを取得できるため、TypeScript で使用すると最高の状態になります。
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
ヘルパーは、オプションでリクエストの本文を 2 番目の引数として受け取ります。
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 は自動的に Promise を拒否するため、 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
リクエストを送信することに注意してください。別のリクエスト メソッドを使用する場合は、インターセプターを使用してメソッドを指定する必要があります。
また、Promise が拒否された場合は、応答オブジェクト全体が返されることにも注意してください。
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 には Promise を拒否するのではなく、応答の本文を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 のすべての機能は wiki ページにまとめられています。
軽いです
縮小されたファイル サイズは 12kB ですが、これ以上大きくするつもりはありません。
開発者による、開発者のために設計されています
http リクエストの作成は、特に TypeScript や JavaScript に関しては、すべての開発者が日常的に行う必要があることです。 Awi にはきちんとしたコード ベースがあり、厳密に型指定されており、ビルドされたファイル内にドキュメント ブロックを意図的に残しています。こうすることで、Ctrl キーを押しながらクリックするだけで各メソッドの動作を読むことができます。
柔軟です
Awi の組み込みヘルパーを使用して HTTP リクエストをワンライナーとして実行する簡単な方法を選択することも、リクエスト用の再利用可能なテンプレートを最初から定義して抽出することもできます。
Awi はオープンソースでもあるため、作業を楽にする機能が不足している場合は、お気軽に貢献してください。
インターセプター パターンは Koa から大きく影響を受けており、e2e テスト用のモック サーバーの作成にも使用されています。
Web とノードの両方のエグゼキュータの実装は、他ならぬ axios からインスピレーションを得ています。
マサチューセッツ工科大学