HTTPie هو أداة سطر أوامر تتيح لك التفاعل مع خوادم HTTP بطريقة صديقة للبشر. يحتوي على بنية بسيطة ومعبرة، ويدعم JSON وبيانات النماذج، ويتعامل مع المصادقة ورؤوس الطلبات، ويعرض مخرجات ملونة ومنسقة. كما أن لديه بعض الميزات المتقدمة، مثل الجلسات والإضافات والوكلاء، مما يجعله أكثر قوة وتنوعًا.
في هذه المدونة، سأوضح لك كيفية تثبيت واستخدام HTTPie، وكيف يمكن أن يساعدك في اختبار وتصحيح واجهات برمجة التطبيقات الخاصة بك بسهولة وكفاءة. سأشارك أيضًا بعض النصائح والحيل التي تعلمتها في الطريق، وبعض الموارد التي يمكنك استخدامها لمعرفة المزيد عن HTTPie.
كيفية تثبيت HTTPie
الخطوة الأولى لاستخدام HTTPie هي تثبيته على نظامك. HTTPie مكتوب بلغة بايثون، ويمكنك تثبيته باستخدام pip، مدير حزم بايثون. للقيام بذلك، افتح الطرفية الخاصة بك وقم بتنفيذ الأمر التالي:
pip install --upgrade httpie
سيقوم هذا بتثبيت أحدث إصدار من HTTPie على نظامك، وسيقوم أيضًا بترقية أي إصدار موجود إذا كان لديك واحد. يمكنك التحقق من إصدار HTTPie عن طريق تشغيل:
http --version
يجب أن ترى شيئًا مثل هذا:
http 2.5.0
HTTPie - أداة CLI تشبه cURL للبشر.
https://httpie.io
إذا رأيت هذه المخرجات، تهانينا! لقد قمت بتثبيت HTTPie بنجاح وأنت مستعد لاستخدامه.
كيفية إرسال طلبات HTTP باستخدام HTTPie
البنية الأساسية لـ HTTPie هي:
http [flags] [METHOD] URL [ITEM [ITEM]]
حيث:
flags
هي وسائط اختيارية تعدل سلوك HTTPie، مثل-v
لوضع التفصيل،-h
للمساعدة، أو-f
لتتبع إعادة التوجيه.METHOD
هو طريقة HTTP المراد استخدامها، مثل GET، POST، PUT، PATCH، DELETE، إلخ. إذا تم حذفها، defaults HTTPie إلى GET.URL
هو رابط خادم HTTP الذي تريد التفاعل معه، مثلhttps://example.com/api/users
.ITEM
هو زوج مفتاح-قيمة اختياري يحدد بيانات الطلب، مثلname=John
لبيانات النموذج، أوname:=John
لبيانات JSON. يمكنك أيضًا استخدامITEM
لتحديد الرؤوس، مثلUser-Agent:HTTPie
.
على سبيل المثال، لإرسال طلب GET إلى https://example.com/api/users
، يمكنك ببساطة تشغيل:
http https://example.com/api/users
سيرسل هذا طلب GET إلى الرابط، ويعرض الاستجابة بطريقة ملونة ومنسقة. سترى شيئًا مثل هذا:
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 326
Content-Type: application/json; charset=utf-8
Date: Thu, 08 Feb 2024 05:43:25 GMT
ETag: W/"146-8a9e8c9f"
Server: nginx/1.19.6
X-Powered-By: Express
[
{
"id": 1,
"name": "John",
"email": "john@example.com"
},
{
"id": 2,
"name": "Jane",
"email": "jane@example.com"
},
{
"id": 3,
"name": "Bob",
"email": "bob@example.com"
}
]
كما ترى، يعرض HTTPie خط حالة الاستجابة والرؤوس والجسم بطريقة واضحة وسهلة القراءة. كما يستخدم ألوانًا لتسليط الضوء على أجزاء مختلفة من الاستجابة، مثل الأخضر للرؤوس، والأزرق لمفاتيح JSON، والأصفر لقيم JSON.
يمكنك أيضًا إرسال طرق HTTP أخرى مع HTTPie، مثل POST، PUT، PATCH، أو DELETE، عن طريق تحديد الطريقة قبل الرابط. على سبيل المثال، لإرسال طلب POST إلى https://example.com/api/users
مع بعض بيانات JSON، يمكنك تشغيل:
http POST https://example.com/api/users name=John email=john@example.com
سيرسل هذا طلب POST إلى الرابط، مع بيانات JSON التالية في جسم الطلب:
{
"name": "John",
"email": "john@example.com"
}
يمكنك أيضًا استخدام عامل التشغيل :=
لتحديد قيم JSON، مثل name:="John"
أو age:=25
. هذا مفيد عندما تريد إرسال قيم غير نصية، مثل الأرقام، أو القيم البولية، أو المصفوفات، أو الكائنات.
سيعرض HTTPie الاستجابة بنفس الطريقة كما كان من قبل، ولكن مع رمز حالة مختلف وجسم. سترى شيئًا مثل هذا:
HTTP/1.1 201 Created
Connection: keep-alive
Content-Length: 110
Content-Type: application/json; charset=utf-8
Date: Thu, 08 Feb 2024 05:43:25 GMT
ETag: W/"6e-8a9e8c9f"
Location: /api/users/4
Server: nginx/1.19.6
X-Powered-By: Express
{
"id": 4,
"name": "John",
"email": "john@example.com"
}
كما ترى، يعرض HTTPie رمز حالة الاستجابة كـ 201 تم الإنشاء، مما يدل على أنه تم إنشاء مورد جديد على الخادم. كما يعرض رأس الموقع، الذي يشير إلى رابط المورد الجديد الذي تم إنشاؤه. يحتوي جسم الاستجابة على تمثيل JSON للمستخدم الجديد.
يمكنك استخدام نفس البنية لإرسال طرق HTTP الأخرى، مثل PUT، PATCH، أو DELETE، عن طريق استبدال اسم الطريقة. على سبيل المثال، لتحديث اسم المستخدم الذي يحمل id 4، يمكنك تشغيل:
http PATCH https://example.com/api/users/4 name=Jack
سيقوم هذا بإرسال طلب PATCH إلى الرابط، مع بيانات JSON التالية في جسم الطلب:
{
"name": "Jack"
}
سيعرض HTTPie الاستجابة بنفس الطريقة كما كان من قبل، ولكن مع رمز حالة وجسم مختلفين. سترى شيئًا مثل هذا:
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 110
Content-Type: application/json; charset=utf-8
Date: Thu, 08 Feb 2024 05:43:25 GMT
ETag: W/"6e-8a9e8c9f"
Server: nginx/1.19.6
X-Powered-By: Express
{
"id": 4,
"name": "Jack",
"email": "john@example.com"
}
كما ترى، يعرض HTTPie رمز حالة الاستجابة كـ 200 OK، مما يدل على أنه تم تحديث المورد بنجاح. يحتوي جسم الاستجابة على تمثيل JSON للمستخدم المحدث.
يمكنك أيضًا استخدام HTTPie لإرسال بيانات النموذج، عن طريق استخدام عامل التشغيل =
بدلاً من عامل التشغيل :=
. على سبيل المثال، لإرسال طلب POST إلى https://example.com/api/login
مع بعض بيانات النموذج، يمكنك تشغيل:
http POST https://example.com/api/login username=John password=secret
سيرسل هذا طلب POST إلى الرابط، مع بيانات النموذج التالية في جسم الطلب:
username=John&password=secret
سيعرض HTTPie الاستجابة بنفس الطريقة كما كان من قبل، ولكن مع نوع محتوى وجسم مختلف. سترى شيئًا مثل هذا:
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 32
Content-Type: text/plain; charset=utf-8
Date: Thu, 08 Feb 2024 05:43:25 GMT
ETag: W/"20-8a9e8c9f"
Server: nginx/1.19.6
X-Powered-By: Express
تسجيل الدخول ناجح. مرحبًا، جون!
كما ترى، يعرض HTTPie نوع محتوى الاستجابة كـ text/plain، مما يدل على أن جسم الاستجابة هو نص عادي. يحتوي جسم الاستجابة على رسالة بسيطة تؤكد تسجيل الدخول.
كيفية فحص جسم الاستجابة والرؤوس باستخدام HTTPie
إحدى الميزات الرائعة لـ HTTPie هي أنها تقوم تلقائيًا بتحليل وتنسيق جسم الاستجابة والرؤوس، اعتمادًا على نوع المحتوى. على سبيل المثال، إذا كانت الاستجابة هي JSON، سيعرضها HTTPie بطريقة جميلة وملونة، كما رأينا من قبل. إذا كانت الاستجابة هي HTML، سيعرضها HTTPie كنص خام، ولكن مع تمييز نحوي. إذا كانت الاستجابة هي صورة، سيعرضها HTTPie كبيانات ثنائية، ولكن مع تلميح لنوع الصورة وحجمها.
يمكنك أيضًا استخدام بعض الأعلام لتعديل كيفية عرض HTTPie للاستجابة. على سبيل المثال، يمكنك استخدام العلم -b
أو --body
لعرض جسم الاستجابة فقط، دون الرؤوس. يمكنك استخدام العلم -h
أو --headers
لعرض رؤوس الاستجابة فقط، دون الجسم. يمكنك استخدام العلم -p
أو --print
لتحديد أي أجزاء من الطلب والاستجابة يجب طباعتها، باستخدام الأحرف التالية:
H
: رؤوس الطلبB
: جسم الطلبh
: رؤوس الاستجابةb
: جسم الاستجابة
على سبيل المثال، لعرض رؤوس الطلب وجسم الاستجابة فقط، يمكنك تشغيل:
http -p HB https://example.com/api/users
سيظهر لك شيء مثل هذا:
GET /api/users HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: example.com
User-Agent: HTTPie/2.5.0
[
{
"id": 1,
"name": "John",
"email": "john@example.com"
},
{
"id": 2,
"name": "Jane",
"email": "jane@example.com"
},
{
"id": 3,
"name": "Bob",
"email": "bob@example.com"
}
]
كما ترى، يعرض HTTPie رؤوس الطلب وجسم الاستجابة، ولكن ليس رؤوس الاستجابة أو جسم الطلب.
يمكنك أيضًا استخدام العلم -j
أو --json
لفرض HTTPie على اعتبار الاستجابة كـ JSON، حتى لو لم يكن نوع المحتوى هو application/json. هذا مفيد عندما لا يرسل الخادم نوع المحتوى الصحيح، أو عندما تريد تحليل استجابة غير JSON كـ JSON. على سبيل المثال، لتحليل استجابة نص عادي كـ JSON، يمكنك تشغيل:
http -j https://example.com/api/hello
سيظهر لك شيء مثل هذا:
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 13
Content-Type: text/plain; charset=utf-8
Date: Thu, 08 Feb 2024 05:43:25 GMT
ETag: W/"d-8a9e8c9f"
Server: nginx/1.19.6
X-Powered-By: Express
{
"hello": "world"
}
كما ترى، يقوم HTTPie بتحليل الاستجابة النصية كـ JSON، ويعرضها بطريقة جميلة وملونة.
يمكنك أيضًا استخدام العلم -o
أو --output
لحفظ جسم الاستجابة في ملف، بدلاً من عرضه على الطرفية. هذا مفيد عندما تريد تنزيل ملف من الخادم، مثل صورة أو PDF أو ملف ZIP. على سبيل المثال، لتنزيل صورة من https://example.com/api/image
، يمكنك تشغيل:
http -o image.jpg https://example.com/api/image
سيقوم هذا بحفظ الصورة في ملف يسمى image.jpg
في الدليل الحالي. يمكنك أيضًا استخدام العلم -d
أو --download
لإنشاء اسم ملف تلقائيًا بناءً على الرابط ونوع المحتوى. على سبيل المثال، لتنزيل نفس الصورة، يمكنك تشغيل:
http -d https://example.com/api/image
سيقوم هذا بحفظ الصورة في ملف يسمى image-20240208-054325.jpg
في الدليل الحالي، باستخدام التاريخ والوقت كلاحقة.
كما ترى، توفر لك HTTPie العديد من الخيارات لفحص جسم الاستجابة والرؤوس، ولحفظ الاستجابة في ملف. يمكنك استخدام هذه الخيارات لاختبار وتصحيح واجهات برمجة التطبيقات الخاصة بك، والتحقق من محتوى وشكل الاستجابة.
قيود HTTPie
HTTPie هي أداة سطر أوامر قوية وسهلة الاستخدام للتفاعل مع خوادم HTTP وواجهات برمجة التطبيقات. ومع ذلك، فإن لديها أيضًا بعض القيود، مثل:
- إنها لا تدعم بروتوكولات GraphQL، WebSocket، أو gRPC، التي أصبحت أكثر شيوعًا في تطوير الويب الحديث.
- لا تحتوي على واجهة رسومية (GUI) أو نسخة ويب، التي قد يفضلها بعض المستخدمين الذين لا يشعرون بالراحة مع الطرفيات.
- ليس لديها ميزات مدمجة لتصميم واجهة برمجة التطبيقات، الوثائق، المحاكاة، أو الاختبار، التي تعتبر أساسية لتطوير واجهة برمجة التطبيقات والتعاون.
لماذا يجب عليك استخدام Apidog
Apidog هي منصة متكاملة لتصميم واجهات برمجة التطبيقات، وتصحيح الأخطاء، والتطوير، والمحاكاة، والاختبار. تجمع بين وظائف Postman وSwagger وMock وJMeter في أداة واحدة. قد ترغب في استخدام Apidog إذا كنت تبحث عن:
- حل شامل وتعاوني لدورة حياة واجهة برمجة التطبيقات بالكامل، من التصميم إلى الاختبار، والمحاكاة، والوثائق.
- أداة تدعم بروتوكولات متعددة، مثل HTTP، GraphQL، WebSocket، وgRPC.
- أداة تحتوي على كل من تطبيق سطح المكتب ونسخة ويب، بالإضافة إلى واجهة سطر الأوامر (CLI).
- أداة تطبق التصميم أولاً لواجهة برمجة التطبيقات، مما يسهل مزامنة واجهة برمجة التطبيقات، والمواصفات، والتعديلات عبر دورة حياة واجهة برمجة التطبيقات بالكامل.
الخطوة 1. افتح Apidog وانقر على "API جديدة" لإنشاء واجهة برمجة التطبيقات جديدة للاختبار.
الخطوة 2. اختر طريقة HTTP التي ستستخدمها لواجهة برمجة التطبيقات وأدخل رابط نقطة النهاية.
الخطوة 3. أدخل المعلومات اللازمة مثل المعلمات وفقًا لمواصفات واجهة برمجة التطبيقات وانقر على زر "إرسال" لإرسال طلب واجهة برمجة التطبيقات والحصول على الاستجابة.
استنتاج
HTTPie هي أداة قوية وسهلة الاستخدام تتيح لك التواصل مع خوادم HTTP وواجهات برمجة التطبيقات من خلال الطرفية الخاصة بك. تحتوي على العديد من الميزات والخيارات التي تجعل من السهل تخصيص وتنسيق طلباتك واستجاباتك. يمكنك استخدام HTTPie لاختبار، وتصحيح، واستكشاف واجهات برمجة التطبيقات، بالإضافة إلى أتمتة المهام وسير العمل.
إذا كنت ترغب في استخدام منصة أكثر تكاملاً لتصميم، وتصحيح، وتطوير، ومحاكاة، واختبار واجهات برمجة التطبيقات، يمكنك أيضًا تجربة Apidog. Apidog هي أداة تربط جميع مراحل دورة حياة واجهة برمجة التطبيقات، من التصميم إلى الاختبار، والمحاكاة، والوثائق.