ما هو وسيلة مريحة لرصد الموارد REST عن التغييرات؟

StackOverflow https://stackoverflow.com/questions/405950

  •  03-07-2019
  •  | 
  •  

سؤال

وإذا كان هناك مورد REST التي أريد لمراقبة تغييرات أو تعديلات من عملاء آخرين، ما هو أفضل (والأكثر راحة) وسيلة للقيام بذلك؟

وفكرة واحدة لقد كان للقيام بذلك هي من خلال توفير موارد محددة من شأنها أن تبقي الاتصال مفتوحة بدلا من العودة على الفور إذا لا مورد لا (حتى الآن) وجود لها. على سبيل المثال، وبالنظر إلى الموارد:

/game/17/playerToMove

وعلى "GET" على هذا المورد قد أخبرني أنه بدوره خصمي للتحرك. بدلا من باستمرار الاقتراع هذا المورد لمعرفة متى حان دوري للتحرك، وأنا قد لاحظ عدد الخطوة (مثلا 5) ومحاولة استرداد الخطوة التالية:

/game/17/move/5

في نموذج REST "طبيعية"، على ما يبدو طلب GET لهذا URL سيعود (ليست موجودة) خطأ 404. ومع ذلك، إذا بدلا من ذلك، تبقى الملقم الاتصال مفتوحة حتى خصمي لعبت انتقاله، أي بمعنى:.

PUT /game/17/move/5

وثم الملقم يمكن إرجاع محتويات أن خصمي وضعت في هذا المورد. ومن شأن هذا أن توفر لي مع البيانات أحتاج، فضلا عن نوع من الاشعار عن عند خصمي انتقلت دون الحاجة إلى الاقتراع.

هل هذا النوع من مخطط مريحة؟ أو أنها لا تنتهك نوعا من مبدأ REST؟

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

المحلول

والحل المقترح يبدو وكأنه الاقتراع طويلة ، والتي يمكن أن تعمل بشكل جيد حقا.

وأنت ستطلب /game/17/move/5 وسوف الخادم لم يرسل أية بيانات، حتى تم الانتهاء الخطوة 5. إذا انخفض الاتصال، أو تحصل على مهلة، يمكنك ببساطة إعادة الاتصال حتى تحصل على استجابة صحيحة.

والاستفادة من هذا هو انها سريعة جدا - بمجرد أن الملقم البيانات الجديدة، فإن العميل يحصل عليها. كما انها مرنة للاتصالات انخفض، ويعمل إذا تم قطع اتصال العميل لفترة من الوقت (هل يمكن طلب /game/17/move/5 بعد ساعة تم نقله والحصول على البيانات على الفور، ثم الانتقال إلى move/6/ وهلم جرا)

وهذه المسألة مع الاقتراع طويلة هي كل "الاستطلاع" العلاقات حتى في موضوع الخادم الذي يكسر بسرعة الخوادم مثل أباتشي (كما نفدت العمال والمواضيع، لذلك لا يمكن أن تقبل الطلبات الأخرى). كنت في حاجة الى خادم الويب المتخصصة لخدمة طلبات الاقتراع منذ فترة طويلة .. وبيثون وحدة twisted (وو" محرك الشبكات الحدث يحركها ") تعتبر كبيرة بالنسبة لهذا، لكنه أكثر من عمل منتظم الاقتراع ..

في الرد على تعليقك حول جيتي / القط، ليس لدي أي خبرة مع جافا، ولكن يبدو أنهم على حد سواء استخدام نظام مماثل بركة من بين العمال والمواضيع اباتشي، لذلك سوف يكون هذا نفس المشكلة. لم أجد هذا المنصب حيث يبدو أن معالجة هذه المشكلة بالضبط (للذكور)

نصائح أخرى

ولقد وجدت هذه المقالة اقتراح رأس جديد HTTP، "عندما المعدلة ما بعد"، التي لا أساسا نفس الشيء - ينتظر الخادم وتحافظ على اتصال مفتوحة حتى يتم تعديل الموارد

وأنا أفضل نهج قائم على نسخة بدلا من النهج القائم على الطابع الزمني، لأنه أقل عرضة للسباق الظروف ويعطيك معلومات أكثر قليلا عن ما هو عليه كنت استرجاع. أي أفكار لهذا النهج؟

وأنا أقترح 404، إذا العميل المقصود هو متصفح ويب، والحفاظ على الاتصال مفتوحة يمكن أن تمنع بشكل فعال طلبات متصفح في عميل إلى نفس المجال. والامر متروك للعميل عدد مرات الاستطلاع.

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