Vielseitiger, moderner und leichter HTTP-Client basierend auf Versprechen.
npm i -S awi
< script src =" https://cdn.jsdelivr.net/npm/awi/dist/awi.js " > </ script >
Knoten | Chrom | Rand | Firefox | Oper | Safari |
---|---|---|---|---|---|
6.13.0 | 52 | 17 | 29 | 19 | 10 |
Die einfachsten Anforderungen können mit Awi nahtlos ausgeführt werden. Erstellen Sie einfach eine neue Instanz und rufen Sie die Methode „ get
Sugar“ mit der gewünschten URL auf. Dieser Aufruf gibt eine Instanz der Response
von Awi zurück, auf die der Antworttext, der Status und die Header leicht zugänglich sind.
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 ist am besten geeignet, wenn es in TypeScript verwendet wird, da Sie alle Antworten mit Typhinweisen versehen und von Ihrer IDE Typprüfungen und eine praktische automatische Vervollständigung erhalten können.
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 bietet Syntaxzucker für alle grundlegenden Anforderungsmethoden. POST
, PUT
und PATCH
Helfer übernehmen optional den Hauptteil der Anfrage als zweites 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 )
Bei Erhalt eines Antwortstatus von über 400 lehnt Awi das Versprechen automatisch ab, sodass Sie den Antwortstatus nicht über if
-Anweisungen willkürlich überprüfen müssen.
import { Awi } from 'awi'
await new Awi ( )
. post ( 'http://server.api/todos' , { completed : false } )
. catch ( response => console . assert ( response . status === 422 ) )
Awi bietet auch einen body
Helfer, um die Wiederholung des berüchtigten .then(res => res.body)
Promise-Callbacks zu vermeiden. Dieser Helfer akzeptiert einen generischen Typ, um dem Antworttext einen Typhinweis zu geben.
Beachten Sie, dass dieser Helfer standardmäßig eine
GET
Anfrage sendet. Wenn Sie eine andere Anforderungsmethode verwenden möchten, muss die Methode mithilfe eines Interceptors angegeben werden.
Beachten Sie außerdem, dass bei Ablehnung des Versprechens das gesamte Antwortobjekt zurückgegeben wird.
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' )
Dank @bausano und seinem großartigen Datenstrukturpaket verfügt Awi über einen optional
Helfer, der den Antworttext als Optional<T>
zurückgibt, anstatt das Versprechen abzulehnen.
Beachten Sie, dass dieser Helfer standardmäßig eine
GET
Anfrage sendet. Wenn Sie eine andere Anforderungsmethode verwenden möchten, muss die Methode mithilfe eines Interceptors angegeben werden.
Beachten Sie außerdem, dass das Versprechen dennoch abgelehnt wird, wenn die Anfrage aufgrund von Netzwerkproblemen oder einer Fehlkonfiguration fehlschlägt.
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 )
Request Interceptors zeichnen Awi aus. Inspiriert von Koa bietet Awi eine use
-Methode, die einen asynchronen Rückruf akzeptiert, der das Anforderungsobjekt ändert.
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 ) )
Alle Eigenschaften, die am Anforderungsobjekt geändert werden können, sind in der API-Referenz von Awi verfügbar.
Jede Anfrage in Awi wird durch das der Anfrage zugewiesene Array von Interceptoren eindeutig definiert. Alle Hilfsmethoden von Awi sind nichts weiter als Zucker für die Zuweisung von Abfangjägern. Alle Anfragen können ohne Verwendung der Helfer über die send
gesendet werden.
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 ) )
Obwohl dieser Ansatz ziemlich langwierig ist und die Verwendung von Hilfsprogrammen viel sauberer ist, bietet er eine unkomplizierte Möglichkeit, Awi zu erweitern und/oder Anforderungsvorlagen zu erstellen.
Wie Sie sehen, bietet das Interceptor-Konzept eine Möglichkeit, auf sehr schöne und wiederverwendbare Weise Anforderungsvorlagen für Ihre Anwendung zu erstellen. Dies kann besonders nützlich sein, wenn autorisierte Anfragen gestellt werden.
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 ) )
Die gesamte Funktionalität von Awi ist auf der Wiki-Seite zusammengefasst.
Es ist leicht
Die minimierte Dateigröße beträgt 12 KB und wir beabsichtigen nicht, sie zu vergrößern!
Es wurde von Entwicklern für Entwickler entwickelt
Jeder Entwickler muss täglich HTTP-Anfragen stellen, insbesondere wenn es um TypeScript oder JavaScript geht. Awi hat eine ordentliche Codebasis, ist streng typisiert und wir belassen absichtlich Dokumentationsblöcke in den erstellten Dateien – auf diese Weise können Sie nachlesen, was jede Methode tut, indem Sie einfach bei gedrückter Strg-Taste darauf klicken!
Es ist flexibel
Sie können entweder den einfachen Weg wählen und die integrierten Helfer von Awi verwenden, um Ihre HTTP-Anfrage einzeilig auszuführen, oder Sie können wiederverwendbare Vorlagen für Ihre Anfragen von Grund auf definieren und extrahieren!
Awi ist ebenfalls Open Source. Sollten Sie also Funktionen vermissen, die Ihnen das Leben erleichtern würden, können Sie gerne einen Beitrag leisten.
Das Interceptor-Muster ist stark von Koa inspiriert, das auch zur Erstellung eines Mock-Servers für unsere e2e-Tests verwendet wird.
Die Implementierung von Executoren für Web und Node ist von niemand anderem als Axios inspiriert.
MIT