باستخدام HTTP PUT، ولكن لا يحل محل الكيان بالكامل

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

  •  06-07-2019
  •  | 
  •  

سؤال

أقوم بتطوير واجهة برمجة تطبيقات REST، وأتساءل عما يلي:

أريد استخدام HTTP PUT لتحديث بعض الكيانات في خدمة الويب.سيكون التنسيق نصًا مشفرًا بـ urlencoded.هل من المقبول تحديث الحقول التي تم تحديدها بالفعل فقط، بدلاً من تحديث الكيان بأكمله؟

أنا أسأل، لأن PUT سيكون طريقة ملائمة جدًا لإجراء بعض التحديثات، لكنني لا أريدهم أن يزيلوا الحقول إذا حدث خطأ إملائي في بعضها.بالإضافة إلى ذلك، لا أريد إجبار المُنفِّذ على القيام دائمًا بإجراء GET أولاً ونسخ كل حقل قد لا يستخدمه فعليًا..

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

المحلول

وضعت فقط لاستبدال كامل. وهناك اقتراح لPATCH الفعل لمعالجة هذه المشكلة لديك (<لأ href = "http://www.ietf.org/internet-drafts/draft-dusseault-http-patch-14.txt" يختلط = "نوفولو noreferrer "> http://www.ietf.org/internet-drafts/draft-dusseault-http-patch-14.txt )

وتصحيح، ومع ذلك، لا يزال قد لا يكون ما تريد. المعلومات التي يتم إرسالها موردا التحديث التي يمكن أن تفعل أشياء مثل عدادات زيادة وهكذا، على عكس وضع، لا idempotent.

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

نصائح أخرى

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

وراجع المادة روي كل شيء على مايرام لاستخدام وظيفة

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

<!-- PUT books/1337 -->

<book>
    <title>Hello</title>
    <author>John Doe</author>
</book>

<!-- PUT books/1337 -->

<book>
    <title>Hello here I am</title>
</book>

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

  1. PUT إلى مورد "التحديث" الجديد.سيقوم بشكل أساسي بتسجيل التحديث الذي تريد تطبيقه ومن ثم يكون مسؤولاً عن عدم تطبيق التكرارات.أتصور أن هذا يعمل إلى حد ما مثل نظام التحكم في الإصدار الذي يحتفظ بقائمة من التصحيحات/مجموعات التغييرات ويصبح معقدًا جدًا في كل مرة أحاول التفكير في جميع الحالات الزاوية.

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

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

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