سؤال

كنت أتساءل ما هي آراء الناس مريحة PUT العملية التي ترجع لا شيء (فارغة) في هيئة الاستجابة.

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

المحلول

مواصفات HTTP (RFC 2616.) لديه عدد من التوصيات المطبقة. هنا هو التفسير الخاص بي:

  • رمز حالة HTTP. 200 OK للحصول على وضع ناجح من تحديث إلى مورد حالي. لا يحتاج أي هيئة استجابة. (لكل القسم 9.6., 204 No Content هو أكثر ملاءمة.)
  • رمز حالة HTTP. 201 Created للحصول على عرض ناجح من مورد جديد، مع أوري الأكثر محددة للمورد الجديد الذي تم إرجاعه في حقل رأس الموقع وأي أي أوريس وبيانات تعريف أخرى ذات صلة بالمواد التي يرصد بها المورد في هيئة الاستجابة. فيRFC 2616 القسم 10.2.2)
  • رمز حالة HTTP. 409 Conflict لطرد غير ناجح بسبب 3بحث وتطويرتعديل، معيار، مع قائمة الاختلافات بين محاولة التحديث والمورد الحالي في هيئة الاستجابة. فيRFC 2616 القسم 10.4.10)
  • رمز حالة HTTP. 400 Bad Request للحصول على وضع غير ناجح، مع نص اللغة الطبيعية (مثل اللغة الإنجليزية) في هيئة الاستجابة التي تشرح سبب فشل وضعها. فيRFC 2616 القسم 10.4)

نصائح أخرى

بدلا من معظم الإجابات هنا، أعتقد في الواقع أن وضعه يجب أن يعيد المورد المحدث (بالإضافة إلى رمز HTTP للطبع).

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

ال HTTP / 1.1 المواصفات (القسم 9.6) يناقش رموز الاستجابة / الخطأ المناسبة. ومع ذلك، لا يعالج محتوى الاستجابة.

ماذا تتوقع؟ يبدو رمز استجابة HTTP بسيط (200 وما إلى ذلك) واضحا ولا لبس فيه.

أعتقد أنه من الممكن أن يعيد الخادم المحتوى استجابة لطرح. إذا كنت تستخدم تنسيق مغلف استجابة يسمح ببيانات Sideloaded (مثل التنسيق المستهلكة بواسطة Ember-Data)، فيمكنك أيضا تضمين كائنات أخرى قد تم تعديلها عبر مشغلات قاعدة البيانات، وما إلى ذلك (البيانات المهملة بشكل صريح للحد # من الطلبات، وهذا يبدو وكأنه مكان جيد لتحسين.)

إذا كنت أقبل فقط وضعها ولا يوجد لديه أي شيء للإبلاغ عنها، فأنا استخدم رمز الحالة 204 بدون أي جسم. إذا كان لدي شيء للإبلاغ، فأنا استخدم رمز الحالة 200، وتشمل الجسم.

رمز استجابة HTTP لعام 201 ل "تم إنشاؤه" جنبا إلى جنب مع رأس "الموقع" للإشارة إلى حيث يمكن للعميل العثور على المورد الذي تم إنشاؤه حديثا.

استخدمت واجهة برمجة تطبيقات مريحة في خدماتي، وهنا رأيي: أولا يجب أن نصل إلى رؤية مشتركة: PUT يستخدم لتحديث مورد لا ينشئ أو الحصول عليه.

حددت الموارد مع: Stateless resource و Stateful resource:

  • موارد عديمة الجنسية لهذه الموارد، فقط إرجاع جهاز httpcode مع هيئة فارغة، يكفي.

  • موارد دعائية على سبيل المثال: إصدار المورد. لهذا النوع من الموارد، يجب عليك تقديم الإصدار عندما تريد تغييره، لذلك إرجاع المورد الكامل أو إرجاع الإصدار إلى العميل، لذلك لا يقوم العميل بإرسال طلب الحصول عليه بعد إجراء التحديث.

ولكن, ، لخدمة أو نظام، احتفظ بها simple, clearly, easy to use and maintain هو الشيء الأكثر أهمية.

إذا كانت Backend of the Rest API هي قاعدة بيانات SQL العلائقية، ثم

  1. لابد أن يكون لديك rowversion. في كل سجل يمكن تحديثه (لتجنب مشكلة تحديث المفقودة)
  2. يجب إرجاع دائما نسخة جديدة من السجل بعد وضع (للحصول على الجديد rowversion.).

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

تماما كما أن هيئة طلب فارغة تتماشى مع الغرض الأصلي من طلب الحصول على طلب الحصول وبرنامج استجابة فارغ يتماشى مع الغرض الأصلي من طلب وضع.

يبدو جيدا ... على الرغم من أنني أعتقد أن إشارة بدائية للنجاح / الفشل / الوقت المنشور / # البايتات المستلمة / إلخ. سيكون الأفضل.

تحرير: كنت أفكر على خطوط سلامة البيانات و / أو حفظ السجلات؛ قد تكون البيانات الوصفية مثل MD5 Hash أو Timestamp للوقت المستلم مفيدا للبيانات الكبيرة.

من الناحية المثالية سيعود استجابة النجاح / الفشل.

هناك فرق بين رأس وجسم استجابة HTTP. يجب ألا يعيد وضع الجسم أبدا، ولكن يجب إرجاع رمز الاستجابة في الرأس. فقط اختر 200 إذا كان ناجحا، و 4XX إذا لم يكن كذلك. لا يوجد شيء مثل رمز الإرجاع فارغ. لماذا تريد أن تفعل هذا؟

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