عميل http متعدد الاستخدامات وحديث وخفيف الوزن بناءً على الوعود.
npm i -S awi
< script src =" https://cdn.jsdelivr.net/npm/awi/dist/awi.js " > </ script >
العقدة | الكروم | حافة | فايرفوكس | الأوبرا | سفاري |
---|---|---|---|---|---|
6.13.0 | 52 | 17 | 29 | 19 | 10 |
يمكن تنفيذ أبسط الطلبات بسلاسة مع Awi. ما عليك سوى إنشاء مثيل جديد واستدعاء طريقة get
Sugar باستخدام عنوان URL المطلوب. تقوم هذه المكالمة بإرجاع مثيل لواجهة Response
Awi التي تحتوي على نص الاستجابة والحالة والرؤوس التي يمكن الوصول إليها بسهولة.
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 وحزمة هياكل البيانات الرائعة، يمتلك Awi مساعدًا 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 بشكل فريد من خلال مجموعة من الاعتراضات المخصصة للطلب. كل أساليب عوي المساعدة ليست أكثر من سكر لتعيين المعترضين. يمكن إرسال جميع الطلبات دون استخدام المساعدين عبر طريقة 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 الخاصة بنا.
إن تنفيذ المنفذين لكل من الويب والعقدة مستوحى من المحاور فقط.
معهد ماساتشوستس للتكنولوجيا