سؤال

هل يعرف أي شخص طريقة قياسية لتجميع طلبات http؟ المعنى - إرسال طلبات http atomic متعددة في رحلة واحدة ذهابًا وإيابًا؟

نحتاج إلى مثل هذه الآلية في تنفيذ REST API لأسباب تتعلق بالأداء.يمكن أن يقلل هذا النوع من الآليات بشكل كبير من عدد الرحلات ذهابًا وإيابًا التي يحتاجها العميل لأدائها لاستهلاك واجهة برمجة التطبيقات.

شكرًا مقدمًا ،

شاي

هل كانت مفيدة؟

المحلول

حدد موردًا جديدًا يحتوي على البيانات التي يريدها العميل.راجع http://roy.gbiv.com / untangled / 2008 / rest-apis-must-be-hypertext-driving # comment-743

نصائح أخرى

هناك طريقة HTTP رسمية للقيام بذلك تسمى HTTP Pipelining . ولكن قد تواجهك مشكلات في جانب المتصفح أكثر من مشكلات جانب الخادم. لذلك قد تتمكن من استخدامه إذا كان لديك مستوى عالٍ من التحكم من جانب العميل فقط.

لا تسمح XHR دائمًا بتوصيل الأنابيب ، ولا يمكنك التحكم في AFAIK في أنفاق HTTP باستخدام Javascript. لذلك لا يمكن تطبيق ajax-jQuery الأساسي. ولكن قد تجد بعض الأشياء المتقدمة مع Comet وبروتوكول Bayeux ، مما يحاكي اتصالات tcp ثنائية الاتجاه طويلة المدى ، حيث ستقلل بالتأكيد رحلات tcp ذهابًا وإيابًا.

أنا لست متخصصًا في المذنب ، ولكن قد تجد معلومات مفيدة حول هذا مقالة Comet & HTTP Pipeling ، حسب فهمي ، فإن معظم هذا هو تجريبي للغاية ، ولكن على الأقل يمكن أن يكون لديك احتياطي لطيف مع المذنب" الكلاسيكي "عندما لا يتوفر HTTP Pipelining قد يحتاج هذا إلى إعادة تسمية أو سؤال جديد.

هذه مشكلة في REST.هم على مستوى الكيان.تتمثل فكرة REST في جعل كل عنوان URL يحدد موردًا بشكل فريد. بالطبع يمكنك تقديم الموارد المجمعة.على سبيل المثال ، www.yoursite.com/customerA؟include=Orders،Faults،Incidents يؤدي هذا إلى إرجاع XML لـ CustomerA ولكنه يقوم أيضًا بإرجاع الطلبات والأعطال وحوادث العميل كمجموعة مضمنة.

إذا كان استخدام الموارد "المجمعة" المخصصة كما ذكر fumanchu أعلاه لا يناسبك ، يمكنك أيضًا محاولة نقل تمثيلات الموارد الأقل تقلبًا إلى ذاكرات التخزين المؤقت لتقليل الحمل على نظامك.على سبيل المثال: غالبًا ما تتضمن صفحات HTML الموجودة على الويب "البشري" الكثير من الصور والكثير من الطلبات الفرعية لا تهم هناك.

إذا كنت تبحث عن خدمات تستند إلى REST أو واجهة برمجة تطبيقات من نوع ما.هناك بعض بدايات المعيار هنا http:// www.odata.org/documentation/odata-version-3-0/batch-processing/

وتنفيذ من Google هنا https:// cloud.google.com/storage/docs/json_api/v1/how-tos/batch

يمكنك إنشاء طلبات مجمعة عن طريق استدعاء new_batch_http_request () في كائن الخدمة الخاص بك ، والذي يقوم بإرجاع كائن BatchHttpRequest ، ثم استدعاء add () لكل طلب تريد تنفيذه. يمكنك تمرير رد نداء مع كل طلب يتم استدعاؤه مع الاستجابة لهذا الطلب. وسائط وظيفة رد الاتصال هي معرف طلب فريد لكل استدعاء لواجهة برمجة التطبيقات ، وكائن استجابة يحتوي على استجابة استدعاء واجهة برمجة التطبيقات ، وكائن استثناء يمكن تعيينه على استثناء يثيره استدعاء واجهة برمجة التطبيقات. بعد إضافة الطلبات ، تقوم باستدعاء execute () لعمل الطلبات. تقوم وظيفة execute () بحظر جميع عمليات الاسترجاعات.

المراجع:

يمكنك تجربة هذا أيضًا https://developers.google.com/api-client

مكتبة / بيثون / دليل / دفعة

https://cloud.google.com/storage/ docs / json_api / v1 / how-tos / batch

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top