Klien http serbaguna, modern, dan ringan berdasarkan janji.
npm i -S awi
< script src =" https://cdn.jsdelivr.net/npm/awi/dist/awi.js " > </ script >
simpul | krom | Tepian | Firefox | Opera | Safari |
---|---|---|---|---|---|
6.13.0 | 52 | 17 | 29 | 19 | 10 |
Permintaan paling dasar dapat dijalankan dengan lancar dengan Awi. Cukup buat instance baru dan panggil metode get
sugar dengan URL yang diinginkan. Panggilan ini mengembalikan instance antarmuka Response
Awi yang memiliki isi respons, status, dan header yang mudah diakses.
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 adalah yang terbaik ketika digunakan dalam TypeScript karena Anda dapat mengetikkan semua respons dan mendapatkan pemeriksaan tipe serta pelengkapan otomatis yang bagus dari IDE Anda.
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 menyediakan gula sintaksis untuk semua metode permintaan dasar. Helper POST
, PUT
dan PATCH
secara opsional mengambil isi permintaan sebagai argumen kedua.
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 )
Setelah menerima status respons 400+, Awi secara otomatis menolak janji tersebut sehingga Anda tidak perlu melakukan pemeriksaan status respons secara sembarangan melalui pernyataan if
.
import { Awi } from 'awi'
await new Awi ( )
. post ( 'http://server.api/todos' , { completed : false } )
. catch ( response => console . assert ( response . status === 422 ) )
Awi juga menyediakan body
helper untuk menghindari pengulangan panggilan balik janji .then(res => res.body)
yang terkenal itu. Helper ini menerima tipe generik untuk mengetikkan petunjuk pada isi respons.
Perhatikan bahwa helper ini mengirimkan permintaan
GET
secara default. Jika Anda ingin menggunakan metode permintaan yang berbeda, metode tersebut perlu ditentukan menggunakan interseptor.
Perhatikan juga bahwa jika janji ditolak, seluruh objek respons dikembalikan.
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' )
Berkat @bausano dan paket struktur datanya yang luar biasa, Awi memiliki pembantu optional
yang mengembalikan isi respons sebagai Optional<T>
daripada menolak janji.
Perhatikan bahwa helper ini mengirimkan permintaan
GET
secara default. Jika Anda ingin menggunakan metode permintaan yang berbeda, metode tersebut perlu ditentukan menggunakan interseptor.
Perhatikan juga bahwa jika permintaan gagal karena masalah jaringan atau kesalahan konfigurasi, janji tetap ditolak.
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 )
Permintaan pencegat itulah yang membuat Awi menonjol. Terinspirasi oleh Koa, Awi menyediakan metode use
yang menerima panggilan balik asinkron yang mengubah objek permintaan.
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 ) )
Semua properti yang dapat dimodifikasi pada objek permintaan tersedia di referensi API Awi.
Setiap permintaan di Awi ditentukan secara unik oleh susunan pencegat yang ditugaskan untuk permintaan tersebut. Semua metode pembantu Awi tidak lain hanyalah gula untuk menugaskan pencegat. Semua permintaan dapat dikirim tanpa menggunakan pembantu melalui metode 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 ) )
Meskipun pendekatan ini agak panjang dan penggunaan pembantu jauh lebih mudah, pendekatan ini menyediakan cara mudah untuk memperluas Awi dan/atau membuat templat permintaan.
Seperti yang Anda lihat, konsep interseptor menyediakan cara untuk membuat templat permintaan untuk aplikasi Anda dengan cara yang sangat bagus dan dapat digunakan kembali. Hal ini dapat sangat berguna ketika membuat permintaan resmi.
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 ) )
Semua fungsi Awi dirangkum di halaman wiki.
Ini ringan
Ukuran file yang diperkecil adalah 12kB dan kami tidak bermaksud memperbesarnya!
Ini dirancang untuk pengembang, oleh pengembang
Membuat permintaan http adalah sesuatu yang perlu dilakukan setiap pengembang setiap hari, terutama jika menyangkut TypeScript atau JavaScript. Awi memiliki basis kode yang rapi, diketik dengan ketat dan kami sengaja meninggalkan blok dokumentasi di file yang dibuat - dengan cara ini, Anda dapat membaca tentang apa yang dilakukan setiap metode hanya dengan mengklik-ctrl di atasnya!
Ini fleksibel
Anda dapat memilih cara yang mudah dan menggunakan pembantu bawaan Awi untuk mengeksekusi permintaan HTTP Anda sebagai satu baris, atau Anda dapat menentukan dan mengekstrak templat yang dapat digunakan kembali untuk permintaan Anda dari awal!
Awi juga merupakan sumber terbuka, jadi jika Anda melewatkan fitur apa pun yang dapat membuat hidup Anda lebih mudah, silakan berkontribusi.
Pola interseptor sangat terinspirasi oleh Koa, yang juga digunakan untuk membuat server tiruan untuk pengujian e2e kami.
Implementasi eksekutor untuk web dan node terinspirasi oleh aksio.
MIT