Client http polyvalent, moderne et léger basé sur des promesses.
npm i -S awi < script src =" https://cdn.jsdelivr.net/npm/awi/dist/awi.js " > </ script > | Nœud | Chrome | Bord | Firefox | Opéra | Safari |
|---|---|---|---|---|---|
| 6.13.0 | 52 | 17 | 29 | 19 | 10 |
Les demandes les plus élémentaires peuvent être exécutées de manière transparente avec Awi. Créez simplement une nouvelle instance et appelez la méthode get sugar avec l'URL souhaitée. Cet appel renvoie une instance de l'interface Response d'Awi dont le corps de la réponse, le statut et les en-têtes sont facilement accessibles.
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 est à son meilleur lorsqu'il est utilisé dans TypeScript, car vous pouvez taper toutes les réponses et obtenir des vérifications de type et une belle saisie semi-automatique à partir de votre 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 fournit du sucre de syntaxe pour toutes les méthodes de requête de base. Les assistants POST , PUT et PATCH prennent éventuellement le corps de la requête comme deuxième argument.
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 ) Dès réception d'un statut de réponse de plus de 400, Awi rejette automatiquement la promesse afin que vous n'ayez pas à effectuer de vérifications arbitraires de l'état de la réponse via des instructions if .
import { Awi } from 'awi'
await new Awi ( )
. post ( 'http://server.api/todos' , { completed : false } )
. catch ( response => console . assert ( response . status === 422 ) ) Awi fournit également un assistant body pour éviter de répéter le fameux rappel de promesse .then(res => res.body) . Cet assistant accepte un type générique pour indiquer le corps de la réponse.
Notez que cet assistant envoie une requête
GETpar défaut. Si vous souhaitez utiliser une méthode de requête différente, la méthode doit être spécifiée à l'aide d'un intercepteur.
Notez également que si la promesse est rejetée, l'intégralité de l'objet de réponse est renvoyée.
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' ) Grâce à @bausano et à son formidable package de structures de données, Awi dispose d'un assistant optional qui renvoie le corps de la réponse en tant que Optional<T> plutôt que de rejeter la promesse.
Notez que cet assistant envoie une requête
GETpar défaut. Si vous souhaitez utiliser une méthode de requête différente, la méthode doit être spécifiée à l'aide d'un intercepteur.
Notez également que si la demande échoue en raison de problèmes de réseau ou d'une mauvaise configuration, la promesse est toujours rejetée.
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 ) Les intercepteurs de requêtes sont ce qui distingue Awi. Inspiré de Koa, Awi fournit une méthode use qui accepte un rappel asynchrone qui modifie l'objet requête.
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 ) )Toutes les propriétés modifiables sur l'objet de requête sont disponibles dans la référence API d'Awi.
Chaque requête dans Awi est définie de manière unique par le tableau d'intercepteurs attribué à la requête. Toutes les méthodes d'assistance d'Awi ne sont rien d'autre qu'un sucre pour attribuer des intercepteurs. Toutes les demandes peuvent être envoyées sans utiliser les assistants via la méthode 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 ) )Bien que cette approche soit plutôt longue et que l'utilisation d'assistants soit beaucoup plus simple, elle fournit un moyen simple d'étendre Awi et/ou de créer des modèles de requêtes.
Comme vous pouvez le constater, le concept d'intercepteur offre un moyen de créer des modèles de requêtes pour votre application d'une manière très agréable et réutilisable. Cela peut être particulièrement utile lors des demandes autorisées.
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 ) )Toutes les fonctionnalités d'Awi sont résumées sur la page wiki.
C'est léger
La taille du fichier réduit est de 12 Ko et nous n’avons pas l’intention de l’agrandir !
Il est conçu pour les développeurs, par les développeurs
Faire des requêtes http est quelque chose que tout développeur doit faire quotidiennement, en particulier lorsqu'il s'agit de TypeScript ou de JavaScript. Awi a une base de code soignée, est strictement typé et nous laissons délibérément des blocs de documentation dans les fichiers construits - de cette façon, vous pouvez lire ce que fait chaque méthode en faisant simplement un ctrl-clic dessus !
C'est flexible
Vous pouvez soit choisir d'opter pour la solution de facilité et utiliser les assistants intégrés d'Awi pour exécuter votre requête HTTP en une seule ligne, soit définir et extraire des modèles réutilisables pour vos requêtes à partir de zéro !
Awi est également open source, donc s'il vous manque des fonctionnalités qui pourraient vous faciliter la vie, n'hésitez pas à contribuer.
Le modèle d'intercepteur est fortement inspiré de Koa, qui est également utilisé pour créer un serveur fictif pour nos tests e2e.
L'implémentation des exécuteurs pour le Web et le nœud n'est inspirée que par axios.
MIT