إذا كنت مطور ويب، فمن المحتمل أنك تعرف أن رؤوس HTTP هي جزء أساسي من أي طلب واستجابة ويب. توفر معلومات مهمة حول العميل والخادم والبيانات المتبادلة. لكن هل تعرف كيف تستخدمها بشكل فعال في تطوير API الخاص بك؟
في هذه المدونة، سنعرض لك بعض رؤوس HTTP الشائعة والمفيدة التي يمكن أن تساعدك في تحسين أداء وأمان وسهولة استخدام API الخاص بك. كما سنقدم لك أداة مفيدة تسمى apidog التي يمكن أن تساعدك في اختبار وتصحيح رؤوس HTTP الخاصة بك بسهولة.
ما هي رؤوس HTTP؟
رؤوس HTTP هي أزواج من المفتاح والقيمة ترسل مع طلب HTTP ورسائل الاستجابة. يتم تقسيمها إلى فئتين: رؤوس الطلب ورؤوس الاستجابة. يتم إرسال رؤوس الطلب بواسطة العميل إلى الخادم، وتحتوي على معلومات مثل نوع المحتوى المرغوب فيه، اللغة المفضلة، بيانات التفويض، والمزيد. بينما يتم إرسال رؤوس الاستجابة من الخادم إلى العميل، وتحتوي على معلومات مثل رمز الحالة، طول المحتوى، ترميز المحتوى، والمزيد.
يمكن أن تكون رؤوس HTTP إما قياسية أو مخصصة. يتم تعريف الرؤوس القياسية بواسطة مواصفة HTTP ولها معنى ونحو محددان سلفاً. الرؤوس المخصصة ليست محددة بواسطة المواصفة ويمكن أن يكون لها أي اسم وقيمة. عادةً ما يتم بادئة الرؤوس المخصصة بـ X-
للإشارة إلى أنها غير قياسية. على سبيل المثال، X-Rate-Limit
هو رأس مخصص يستخدمه بعض APIs للإشارة إلى الحد الأقصى للسرعة للعميل.
لماذا تعتبر رؤوس HTTP مهمة لـ APIs؟
رؤوس HTTP مهمة للـ APIs لأنها يمكن أن تؤثر على أداء وأمان وسهولة استخدام API الخاص بك. إليك بعض فوائد استخدام رؤوس HTTP لـ API الخاص بك:
- الأداء: يمكنك استخدام رؤوس HTTP لتمكين الضغط والتخزين المؤقت والطلبات الشرطية لـ API الخاص بك. يقلل الضغط من حجم البيانات التي تنتقل بين العميل والخادم، مما يمكن أن يحسن من سرعة وكفاءة النطاق الترددي لـ API الخاص بك. يتيح التخزين المؤقت للعميل تخزين وإعادة استخدام البيانات المستلمة من الخادم، مما يمكن أن يقلل من عدد الطلبات والحمل على الخادم الخاص بك. تتيح الطلبات الشرطية للعميل التحقق مما إذا كانت البيانات قد تغيرت منذ الطلب الأخير، وتنزيل البيانات فقط إذا كانت قد تغيرت، مما يمكن أن يوفر عرض النطاق الترددي ووقت المعالجة.
- الأمان: يمكنك استخدام رؤوس HTTP لتمكين CORS، حماية CSRF، و SSL/TLS لـ API الخاص بك. CORS (مشاركة الموارد عبر المواقع) يسمح للعميل بعمل طلبات إلى API الخاص بك من أصل مختلف (نطاق، بروتوكول، أو منفذ) عن ذلك الذي يخدم API الخاص بك، مما يمكن أن يزيد من إمكانية الوصول والتشغيل البيني لـ API الخاص بك. حماية CSRF (تزوير طلبات المواقع المتقاطعة) تمنع العميل من إجراء طلبات غير مصرح بها إلى API الخاص بك عن طريق استخدام رمز يتم إنشاؤه بواسطة الخادم ويتم التحقق منه من قبل العميل، مما يمكن أن يمنع الهجمات الخبيثة على API الخاص بك. يقوم SSL/TLS (طبقة المقابس الآمنة / أمان طبقة النقل) بتشفير البيانات التي تنتقل بين العميل والخادم، مما يمكن أن يمنع التنصت والتلاعب ببيانات API الخاصة بك.
- سهولة الاستخدام: يمكنك استخدام رؤوس HTTP لتوفير معلومات مفيدة وتعليقات للعميل، مثل نوع المحتوى، طول المحتوى، رمز الحالة، رسالة الخطأ، والمزيد. يمكن أن تساعد هذه الرؤوس العميل في تحليل وعرض البيانات بشكل صحيح، والتعامل مع الأخطاء برشاقة، وفهم سلوك وقيود API الخاص بك.
كيف تستخدم رؤوس HTTP في تطوير API الخاص بك؟
الآن بعد أن عرفت ما هي رؤوس HTTP ولماذا هي مهمة، دعني أريك كيف تستخدمها في تطوير API الخاص بك. سأستخدم مثالاً بسيطاً لـ API RESTful الذي يسمح للمستخدمين بإنشاء وقراءة وتحديث وحذف (CRUD) المنشورات على مدونة. ستستخدم API صيغة JSON كتنسيق البيانات، وستدعم المصادقة الأساسية والتخزين المؤقت. إليك بعض رؤوس HTTP التي سأستخدمها لهذا API:
Accept
: يوضح هذا الرأس في الطلب للخادم أنواع الوسائط التي يمكن للعميل قبولها. على سبيل المثال،Accept: application/json
يعني أن العميل يتوقع بيانات JSON من الخادم.Content-Type
: يوضح هذا الرأس في الاستجابة للعميل نوع الوسائط وترميز الأحرف التي يرسلها الخادم. على سبيل المثال،Content-Type: application/json; charset=utf-8
يعني أن الخادم يرسل بيانات JSON مشفرة بـ UTF-8.Authorization
: يرسل هذا الرأس في الطلب بيانات الاعتماد إلى الخادم من أجل المصادقة. على سبيل المثال،Authorization: Basic dXNlcjpwYXNz
يعني أن العميل يرسل اسم المستخدم وكلمة المرور بتشفير base64.WWW-Authenticate
: يتحدى هذا الرأس في الاستجابة العميل من أجل المصادقة. على سبيل المثال،WWW-Authenticate: Basic realm="Blog API"
يعني أن الخادم يطلب من العميل تقديم بيانات الاعتماد لنطاق API الخاص بالمدونة.Cache-Control
: يتحكم هذا الرأس في كيفية تخزين العميل للاستجابة. على سبيل المثال،Cache-Control: public, max-age=3600
يعني أن الاستجابة يمكن تخزينها في أي مخزن مؤقت لمدة تصل إلى ساعة واحدة.ETag
: يوفر هذا الرأس في الاستجابة معرفاً فريداً للموارد. على سبيل المثال،ETag: "5d41402abc4b2a76b9719d911017c592"
يعني أن المورد له قيمة تجزئة 5d41402abc4b2a76b9719d911017c592.If-None-Match
: يتحقق هذا الرأس في الطلب مما إذا كانت الموارد قد تغيرت منذ الطلب الأخير. على سبيل المثال،If-None-Match: "5d41402abc4b2a76b9719d911017c592"
يعني أن العميل لديه نسخة مخزنة من المورد بنفس قيمة ETag.Location
: يقوم هذا الرأس في الاستجابة بإعادة توجيه العميل إلى عنوان URL جديد. على سبيل المثال،Location: /posts/1
يعني أن العميل يجب أن يتبع الرابط إلى المنشور الذي يحمل المعرف 1.
إليك بعض الأمثلة على كيفية استخدام هذه الرؤوس في سيناريوهات مختلفة:
- إنشاء منشور جديد: يرسل العميل طلب POST إلى نقطة النهاية /posts مع بيانات JSON للمنشور الجديد في جسم الطلب. يرسل العميل أيضاً رؤوس
Accept
وAuthorization
للإشارة إلى نوع الوسائط المتوقع وبيانات الاعتماد. يتحقق الخادم من بيانات الاعتماد وينشئ المنشور الجديد في قاعدة البيانات. يرد الخادم برمز حالة 201 Created ورأسLocation
للإشارة إلى المنشور الذي تم إنشاؤه حديثاً. يرسل الخادم أيضاً رأسContent-Type
للإشارة إلى نوع الوسائط للاستجابة، وهو فارغ في هذه الحالة.
POST /posts HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Basic dXNlcjpwYXNz
Content-Type: application/json
Content-Length: 42
{"title": "Hello World", "content": "This is my first post"}
HTTP/1.1 201 Created
Content-Type: application/json
Location: /posts/1
- قراءة منشور: يرسل العميل طلب GET إلى نقطة النهاية /posts/1 لاسترداد المنشور الذي يحمل المعرف 1. يرسل العميل أيضاً رؤوس
Accept
وAuthorization
للإشارة إلى نوع الوسائط المتوقع وبيانات الاعتماد. يتحقق الخادم من بيانات الاعتماد ويجلب المنشور من قاعدة البيانات. يرد الخادم برمز حالة 200 OK وبيانات JSON للمنشور في جسم الاستجابة. يرسل الخادم أيضاً رؤوسContent-Type
وCache-Control
وETag
للإشارة إلى نوع الوسائط، سياسة التخزين المؤقت، ومعرف المورد.
GET /posts/1 HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Basic dXNlcjpwYXNz
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: public, max-age=3600
ETag: "5d41402abc4b2a76b9719d911017c592"
Content-Length: 42
{"title": "Hello World", "content": "This is my first post"}
- تحديث منشور: يرسل العميل طلب PUT إلى نقطة النهاية /posts/1 مع بيانات JSON للمنشور المحدّث في جسم الطلب. يرسل العميل أيضاً رؤوس
Accept
وAuthorization
للإشارة إلى نوع الوسائط المتوقع وبيانات الاعتماد. يتحقق الخادم من بيانات الاعتماد ويقوم بتحديث المنشور في قاعدة البيانات. يرد الخادم برمز حالة 200 OK وبيانات JSON للمنشور المحدّث في جسم الاستجابة. يرسل الخادم أيضاً رؤوسContent-Type
وETag
للإشارة إلى نوع الوسائط والمعرف الجديد للمورد.
PUT /posts/1 HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Basic dXNlcjpwYXNz
Content-Type: application/json
Content-Length: 49
{"title": "Hello World", "content": "This is my updated post"}
HTTP/1.1 200 OK
Content-Type: application/json
ETag: "c2a9fe9f5e88f9f6e3c97d1c5d93cccc"
Content-Length: 49
{"title": "Hello World", "content": "This is my updated post"}
- حذف منشور: يرسل العميل طلب DELETE إلى نقطة النهاية /posts/1 لحذف المنشور الذي يحمل المعرف 1. يرسل العميل أيضاً رأس
Authorization
للإشارة إلى بيانات الاعتماد. يتحقق الخادم من بيانات الاعتماد ويحذف المنشور من قاعدة البيانات. يرد الخادم برمز حالة 204 No Content وجسم استجابة فارغ.
DELETE /posts/1 HTTP/1.1
Host: example.com
Authorization: Basic dXNlcjpwYXNz
HTTP/1.1 204 No Content
- قراءة منشور مخزن مؤقتاً: يرسل العميل طلب GET إلى نقطة النهاية /posts/1 لاسترداد المنشور الذي يحمل المعرف 1. يرسل العميل أيضاً رؤوس
Accept
وAuthorization
وIf-None-Match
للإشارة إلى نوع الوسائط المتوقع وبيانات الاعتماد والمعرف المخزن مؤقتاً للمورد. يتحقق الخادم من بيانات الاعتماد ويقارن قيمة ETag مع تلك المخزنة في قاعدة البيانات.
ما هي بعض رؤوس HTTP الشائعة والمفيدة لـ APIs؟
هناك العديد من رؤوس HTTP التي يمكنك استخدامها لـ API الخاص بك، ولكن إليك بعض من الأكثر شيوعاً وفائدة:
- Content-Type: يحدد هذا الرأس نوع الوسائط للبيانات التي يتم إرسالها أو استلامها بواسطة API. على سبيل المثال،
application/json
يعني أن البيانات بتنسيق JSON،application/xml
يعني أن البيانات بتنسيق XML، وtext/plain
يعني أن البيانات بتنسيق نص عادي. يساعد هذا الرأس العميل في تحليل وعرض البيانات بشكل صحيح، ويساعد الخادم في التحقق من البيانات ومعالجتها بشكل مناسب. - Content-Length: يحدد هذا الرأس حجم البيانات التي يتم إرسالها أو استلامها بواسطة API، بالبايت. يساعد هذا الرأس العميل في تخصيص كمية مناسبة من الذاكرة وعرض النطاق الترددي للبيانات، ويساعد الخادم في التعامل مع البيانات بفعالية وتجنب إعادة تخزين الفائض أو انتهاء المهلة.
- Content-Encoding: يحدد هذا الرأس طريقة الترميز أو الضغط التي يتم تطبيقها على البيانات التي يتم إرسالها أو استلامها بواسطة API. على سبيل المثال،
gzip
يعني أن البيانات مضغوطة باستخدام خوارزمية gzip،deflate
يعني أن البيانات مضغوطة باستخدام خوارزمية deflate، وidentity
تعني أن البيانات غير مضغوطة على الإطلاق. يساعد هذا الرأس العميل في فك ضغط البيانات وقراءتها بشكل صحيح، ويساعد الخادم في ضغط البيانات وترميزها بفعالية وتقليل حجم البيانات. - Cache-Control: يحدد هذا الرأس سياسة التخزين المؤقت التي يتم تطبيقها على البيانات التي يتم إرسالها أو استلامها بواسطة API. على سبيل المثال،
no-cache
يعني أن البيانات يجب ألا يتم تخزينها مؤقتاً من قبل العميل أو أي وكيل وسائط وسيط،max-age
يعني أن البيانات يمكن تخزينها مؤقتاً لمدة معينة من الثواني، وpublic
يعني أن البيانات يمكن تخزينها مؤقتاً من قبل أي مخزن مؤقت، بما في ذلك المخازن العامة. يساعد هذا الرأس العميل في إعادة استخدام البيانات التي تم تخزينها محلياً، ويساعد الخادم في تقليل عدد الطلبات والحمل على الخادم. - ETag: يحدد هذا الرأس معرفاً فريداً للبيانات التي يتم إرسالها أو استلامها بواسطة API. يساعد هذا الرأس العميل في التحقق مما إذا كانت البيانات قد تغيرت منذ الطلب الأخير، وتنزيل البيانات فقط إذا كانت قد تغيرت، باستخدام طلب شرطى مع رأس
If-None-Match
. يساعد هذا الرأس الخادم في تجنب إرسال نفس البيانات بشكل متكرر، وتوفير عرض النطاق الترددي ووقت المعالجة. - Access-Control-Allow-Origin: يحدد هذا الرأس الأصل (النطاق، البروتوكول، والمنفذ) المصرح له بعمل طلبات إلى API الخاص بك. يساعد هذا الرأس الخادم في تمكين CORS لـ API الخاص بك، ويسمح للعميل بالوصول إلى API الخاص بك من أصل مختلف عن ذلك الذي يخدم API الخاص بك. يزيد هذا الرأس من إمكانية الوصول والتشغيل البيني لـ API الخاص بك، ويسمح للعميل باستخدام API الخاص بك مع تطبيقات ويب وأطر عمل متنوعة.
- X-CSRF-Token: يحدد هذا الرأس رمزاً يتم إنشاؤه بواسطة الخادم ويتم إرساله إلى العميل، والذي يجب على العميل إعادته إلى الخادم مع كل طلب. يساعد هذا الرأس الخادم في تمكين حماية CSRF لـ API الخاص بك، ومنع العميل من إجراء طلبات غير مصرح بها إلى API الخاص بك باستخدام رمز يتم التحقق منه بواسطة الخادم. يمنع هذا الرأس الهجمات الخبيثة على API الخاص بك، ويضمن سلامة وموثوقية بيانات API الخاصة بك.
- X-Rate-Limit: يحدد هذا الرأس حد السرعة الذي يتم تطبيقه على العميل بواسطة الخادم. يساعد هذا الرأس الخادم في التحكم في عدد الطلبات التي يمكن للعميل القيام بها إلى API الخاص بك، ومنع العميل من تحميل أو الإساءة إلى API الخاص بك. يساعد هذا الرأس أيضاً العميل في مراقبة واحترام حد السرعة لـ API الخاص بك، وتجنب الأخطاء أو العقوبات.
كيف تختبر وتصحح رؤوس HTTP لـ API الخاص بك؟
لاختبار وتصحيح رؤوس HTTP لـ API الخاص بك، يمكنك استخدام أداة تسمى Apidog. Apidog هي أداة مستندة إلى الويب تسمح لك بعمل طلبات HTTP إلى أي API ورؤية استجابة HTTP في الوقت الفعلي. يمكنك أيضاً رؤية رؤوس HTTP التي يتم إرسالها واستلامها بواسطة API، وتعديلها كما يحلو لك. يوفر APIdog أيضاً ميزات مثل تمييز الصياغة، وتنسيق الكود، وتحليل JSON، والمزيد.
- قم بتشغيل Apidog وأنشئ طلباً جديداً
- في محرر API، أدخل عنوان URL، والطريقة، والمعلمات، والجسم، والرؤوس لطلب HTTP الخاص بك. يمكنك أيضاً استخدام المتغيرات والمحيطات والإعدادات المسبقة لتخصيص طلبك.
- انقر على زر التشغيل لإرسال الطلب واستلام الاستجابة. يمكنك رؤية رمز الحالة، والوقت، والحجم، والرؤوس، وجسم الاستجابة في علامة تبويب التشغيل.
لمراقبة وتصحيح الرؤوس، يمكنك استخدام الأدوات الموجودة في الشريط الجانبي، مثل الرؤوس، الكعكات، إعادة التوجيه، وعلامات التبويب التاريخ. يمكنك أيضاً استخدام خيارات الفلترة والبحث والترتيب للعثور على الرؤوس التي تهمك وفحصها.
APIdog هي أداة بسيطة وقوية يمكن أن تساعدك في اختبار وتصحيح رؤوس HTTP لـ API الخاص بك، وتحسين أداء وأمان API الخاص بك.
كيف تتعلم المزيد عن رؤوس HTTP وapidog؟
إذا كنت ترغب في معرفة المزيد عن رؤوس HTTP وapidog، يمكنك التحقق من المصادر التالية:
- رؤوس HTTP - مستندات MDN على الويب: هذه مرجع شامل لجميع رؤوس HTTP القياسية وغير القياسية، نحوها، استخدامها، وأمثلة.
- حقول رأس HTTP - ويكيبيديا: هذه قائمة بحقول رأس HTTP، تعريفاتها، ومواصفاتها.
- مدونة Apidog: هذه هي المدونة الرسمية لـ apidog، حيث يمكنك العثور على نصائح ودروس وأخبار حول apidog ورؤوس HTTP.
- وثائق Apidog: هذه هي وثائق apidog، حيث يمكنك العثور على أدلة، أسئلة شائعة، ودعم لـ apidog.
الختام
رؤوس HTTP هي جزء أساسي من أي طلب واستجابة ويب، ويمكن أن توفر العديد من الفوائد لـ API الخاص بك. يمكنك استخدام رؤوس HTTP لتمكين الضغط والتخزين المؤقت، CORS، حماية CSRF، والمزيد لـ API الخاص بك، وتحسين أداء وأمان API الخاص بك.
في هذه المدونة، أظهرت لك بعض رؤوس HTTP الشائعة والمفيدة التي يمكن أن تساعدك في تحسين أداء وأمان وسهولة استخدام APIs الخاصة بك. كما قدمت لك أداة مفيدة تسمى apidog التي يمكن أن تساعدك في اختبار وتصحيح رؤوس HTTP الخاصة بك بسهولة. أمل أن تجد هذه التدوينة ملهمة ومفيدة، وأن تستخدم رؤوس HTTP وApidog في تطوير API الخاص بك.