سؤال

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

إذا فهمت ذلك بشكل صحيح، فإن القضية المهمة هي أن وضعها يجب أن تكون idempotent، في حين أن النشر ليس لديه هذا الشرط. لذلك، أعذر كيفية إنشاء سجل جديد يمكن أن يكون Idempotent (أي طلب متعدد لا يؤدي إلى إبداعات متعددة لسجل) على وجه الخصوص عندما يستخدم ORM معرف ككل أساسي ولن يعرف معرف سجل جديد إلى العميل (نظرا لأنها تثبطت في قاعدة البيانات)، فمن هنا لا يمكن أن يكون جزءا من الطلب. كيف يحتفظ AGAVI بمتطلبات Idempotence في ضوء هذا لطلب الطلب.

شكرا.

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

المحلول

يمكن استخدام وضع كل من أجل الإبداع ولتحديث السجلات الكاملة. عادة ما يتم استخدام المشاركة في التحديثات الجزئية والعمليات ذات الصلة وكذلك لإنشاء نوع جديد من السجل على الخادم دون تحديد عنوان URL للمورد (مثل النشر / المقالات / 23 / تعليقات إرجاع الحالة 201 والموقع: / المقالات / 23 / تعليقات / 283136 رأس). لذلك في حالتك (مع معرف تسلسل / Autoincrement)، ستستخدم هذا النهج.

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

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

يمكنك تغيير تعيين الأفعال لتنفيذ AgaviWebRequest في المصانع.xml؛ الرجوع إلى القائمة البريدية للمستخدمين Agavi أو قناة IRC إذا كنت بحاجة إلى مساعدة في ذلك (أو اسأل هنا). إن الكثير من الأشخاص على قناة IRC هي أيضا من ذوي الخبرة للغاية مع تصميم نظام URL في حال كنت بحاجة إلى مزيد من المساعدة في جعل API الخاص بك جميلة.

نصائح أخرى

بدلا من التفكير في PUT كما خلق، فكر في الأمر ك "وضع". يمكنك وضع مورد في URI (أي إرسال مورد بأكمله إلى URI).

PUT http://example.com/articles/1

إذا كررت هذا (إرسال نفس المورد بأكمله إلى نفس URI)، فستحصل على نفس النتيجة وأنت لم تغير المورد على هذا الوري، فهذا ما يجعلها Idempotent.

إذا تنفيذ agavi PUT هو idempotent ثم ينفذ PUT بشكل صحيح. خلاف ذلك ليست كذلك.

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

لاحظ أيضا أن هذا السؤال لا علاقة له بالراحة - فقط استخدام HTTP المناسب. لذا يرجى إزالة علامة الراحة.

لقد تلقيت هذه المشكلة من قبل. هذا يمكن حلها من قبل تغيير المصانع

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