Универсальный, современный и легкий 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. Просто создайте новый экземпляр и вызовите метод get
сахара с нужным URL-адресом. Этот вызов возвращает экземпляр интерфейса 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 также предоставляет помощник body
, чтобы избежать повторения печально известного обратного вызова обещания .then(res => res.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 и его замечательному пакету структур данных у Ави есть optional
помощник, который возвращает тело ответа как Optional<T>
а не отклоняет обещание.
Обратите внимание, что этот помощник по умолчанию отправляет запрос
GET
. Если вы хотите использовать другой метод запроса, этот метод необходимо указать с помощью перехватчика.
Также обратите внимание, что если запрос завершается неудачей из-за проблем с сетью или неправильной конфигурации, обещание все равно отклоняется.
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 ) )
Все свойства, которые можно изменить в объекте запроса, доступны в справочнике по API Awi.
Каждый запрос в 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 обобщен на вики-странице.
Это легкий
Размер уменьшенного файла составляет 12 КБ, и мы не собираемся его увеличивать!
Он разработан разработчиками для разработчиков
Создание HTTP-запросов — это то, что каждый разработчик должен делать ежедневно, особенно когда речь идет о TypeScript или JavaScript. У Awi аккуратная база кода, он строго типизирован, и мы намеренно оставляем блоки документации во встроенных файлах — таким образом, вы можете прочитать, что делает каждый метод, просто щелкнув по нему Ctrl!
Это гибко
Вы можете либо пойти простым путем и использовать встроенные помощники Awi для выполнения вашего HTTP-запроса в однострочном режиме, либо вы можете определить и извлечь многократно используемые шаблоны для ваших запросов с нуля!
Awi также имеет открытый исходный код, поэтому, если вам не хватает каких-либо функций, которые могли бы облегчить вашу жизнь, не стесняйтесь внести свой вклад.
Шаблон перехватчика во многом вдохновлен Koa, который также используется для создания макета сервера для наших тестов e2e.
Реализация исполнителей как для сети, так и для узла вдохновлена никем иным, как аксиомами.
Массачусетский технологический институт