لماذا نحن بحاجة إلى شيء أكثر من HTTP الحصول على, وضع, المنصب ؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

ما هي الفائدة العملية باستخدام HTTP الحصول على, وضع, حذف, بعد, الرأس ؟ لماذا لا تركز على الفوائد السلوكية (السلامة و idempotency), نسيت أسمائهم ، واستخدام الحصول على, وضع أو نشر اعتمادا على السلوك الذي نريد ؟

لماذا لا نستخدم فقط الحصول على, وضع وظيفة (وإسقاط رئيس حذف)?

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

المحلول

فإن [بقية][1] نهج يستخدم بعد, على, وضع وحذف لتنفيذ الخام قواعد الموارد على شبكة الإنترنت.انها بسيطة ومرتبة طريقة للكشف عن الكائنات الطلبات على شبكة الإنترنت.إنه خدمات الويب دون النفقات العامة.

فقط لتوضيح الاختلافات الدلالية.كل عملية هي مختلفة إلى حد ما.وهذه النقطة هي أن يكون لطيف HTTP أساليب واضحة متميزة المعاني.

آخر يخلق كائنات جديدة.URI لا يوجد لديه مفتاح ؛ فإنه يقبل رسالة الهيئة التي تحدد الكائن.SQL Insert.[تحرير في حين لا يوجد أي سبب فني آخر لا مفتاح بقية الناس توحي بقوة أن وظيفة متميزة معنى خلق ، فإنه لا ينبغي أن يكون رئيسي.]

الحصول على استرداد الكائنات الموجودة.URI قد لديك مفتاح, يعتمد على ما إذا كنت تفعل المفرد الحصول على أو الحصول على القائمة.SQL Select

وضع التحديثات كائن موجود.URI لديه مفتاح ؛ فإنه يقبل رسالة الهيئة التي تحديثات كائن.SQL التحديث.

حذف حذف كائن موجود.URI لديه مفتاح.SQL حذف.

يمكنك تحديث سجل مع وظيفة بدلا من وضعها ؟ ليس دون إدخال بعض الغموض.الأفعال ينبغي أن يكون لا لبس فيه الآثار.وعلاوة على ذلك, بعد URI لدينا أي مفتاح ، حيث وضع يجب أن يكون مفتاح.

عندما أنا بعد أتوقع 201 خلق.إذا كنت لا تحصل على أن هناك شيئا خطأ.وبالمثل, عندما أضع أتوقع 200 موافق.إذا كنت لا تحصل على أن هناك شيئا خطأ.

أنا افترض أنك يمكن أن الإصرار على بعض الغموض حيث الوظيفة لا إما وظيفة أو وضع.URI يجب أن تكون مختلفة ؛ أيضا يرتبط رسالة يمكن أن تكون مختلفة.عموما بقية الناس يستقون أفكارهم من SQL حيث إدراج وتحديث مختلفة الأفعال.

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

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

نصائح أخرى

بعد لا ضمانات السلامة أو idempotency.هذا هو سبب وضع و حذف—كل من وضع وحذف هي idempotent (أي 1+N متطابقة إلى نفس النتيجة النهائية فقط 1 الطلب).

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

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

رئيس يستخدم إذا كان كل ما يهمني هو رؤوس من الحصول على طلب كنت لا تريد أن تضيع عرض النطاق الترددي على المحتوى الفعلي.هذا هو جميل أن يكون.

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

على سبيل المثال التدخل وكلاء التخزين المؤقت يمكن أن يكون لها فرصة أفضل من أن يفعل الشيء الصحيح.

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

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

"خدمات الويب مريحة" الفصل 8 قسم "الحمولة الزائدة بعد" ما يلي:"إذا كنت تريد أن تفعل دون وضع وحذف تماما, انها تماما راحة لفضح عمليات آمنة على الموارد من خلال الحصول على كل العمليات من خلال طاقتها بعد.القيام بذلك ينتهك بلدي الموارد العمارة ، لكنه يتوافق مع أقل تقييدا القواعد من الراحة."

في القصير ، استبدال وضع/حذف لصالح آخر يجعل API الصعب قراءة ووضعها/حذف مكالمات لم تعد idempotent.

في كلمة واحدة:

idempotency

في بضع كلمات:

الحصول على = آمنة + idempotent

وضع = idempotent

حذف = idempotent

بعد = لا آمن أو idempotent

'Idempotent' يعني فقط يمكنك أن تفعل ذلك مرارا وتكرارا وسوف دائما تفعل نفس الشيء بالضبط.

يمكنك إعادة إصدار وضع (تحديث) أو حذف الطلب عدة مرات كما تريد و سوف يكون له نفس التأثير في كل مرة ، ومع ذلك التأثير المطلوب تعديل الموارد لذلك لا يعتبر 'آمنة'.

طلب POST ينبغي إنشاء مورد جديد مع كل طلب ، وهذا يعني التأثير سوف تكون مختلفة في كل مرة.ولذلك وظيفة لا تعتبر آمنة أو idempotent.

أساليب مثل الحصول على الرأس هي مجرد عمليات القراءة وبالتالي فهي تعتبر "آمنة" كما aswell idempotent.

هذا هو في الواقع جميلة مفهوم مهم لأنه يوفر معيار/متسقة طريقة لتفسير HTTP المعاملات ؛ هذا هو مفيدة بشكل خاص في سياق أمان.

ليس كل hosters لا تدعم وضع أو حذف.

لقد سألت هذا السؤال في عالم مثالي علينا جميع الأفعال ولكن....:

خدمات الويب مريحة و الأفعال HTTP

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

~$ curl -I slashdot.org
HTTP/1.1 200 OK
Date: Wed, 29 Oct 2008 05:35:13 GMT
Server: Apache/1.3.41 (Unix) mod_perl/1.31-rc4
SLASH_LOG_DATA: shtml
X-Powered-By: Slash 2.005001227
X-تقلى:هذه الفتاة تظهر.أنا أفضل البرامج من هذا النوع:العالم Blankiest فارغة.
Cache-Control: private
Pragma: private
Connection: close
Content-Type: text/html; charset=iso-8859-1

بالنسبة حليقة, -I هو الخيار لأداء رئيس الطلب.الحصول على الوقت والتاريخ الحاليين من الخادم معين, فقط افعل

curl -I $server | grep ^Date

إلى حد الغموض الذي سيسمح أفضل/أسهل إعادة استخدام بسيطة بقية واجهات برمجة التطبيقات.

هل يمكن استخدام فقط الحصول على وظيفة ولكن إذا كنت تفقد بعض من الدقة والوضوح التي وضعت وحذف جلب.المنصب هو البدل العملية التي يمكن أن يعني أي شيء.وضع وحذف سلوك للغاية محددة جيدا.إذا كنت تعتقد إدارة الموارد API ثم ضع وحذف ربما تغطي 80%-90% من الوظائف المطلوبة.إذا كنت تحد نفسك للحصول على وظيفة ثم 40%-60% من api الوصول إليها باستخدام تحدد بعد.

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

أيضا رئيس القيادة يمكن أن تستخدم لتحسين تجربة المستخدم عن (احتمال كبير) تنزيل الملف.استدعاء رئيس لمعرفة كيفية كبيرة الرد سيكون ثم اتصل على الواقع استرداد المحتوى.

راجع ما يلي الرابط على مثال توضيحي.كما يقترح طريقة واحدة لاستخدام خيارات http الطريقة التي لم يتم مناقشتها هنا.

وهناك http امتداد مثل WebDAV التي تتطلب إضافية وظيفيا.

http://en.wikipedia.org/wiki/WebDAV

ملقم ويب الحرب من الأيام السابقة ربما سبب ذلك.

في HTTP 1.0 مكتوبة في عام 1996 كانت هناك فقط الحصول على قسم آخر.ولكن كما ترون في الملحق D, والباعة بدأت لإضافة الأشياء الخاصة بهم.لذا للحفاظ على HTTP متوافق ، اضطروا إلى جعل HTTP 1.1 في عام 1999.

ومع ذلك ، HTTP/1.0 لا تأخذ في الاعتبار بما فيه الكفاية آثار الهرمية وكلاء, التخزين المؤقت, ضرورة الاتصالات المستمرة ، أو المضيفين الظاهري.بالإضافة إلى انتشار من غير كامل-تنفيذ تطبيقات يطلقون على أنفسهم "HTTP/1.0" وقد استلزم إصدار بروتوكول تغيير في الترتيب اثنين من تطبيقات التواصل لتحديد الحقيقية لكل منهما قدرات.

وتحدد هذه المواصفات البروتوكول المشار إليها باسم "HTTP/1.1".ويشمل هذا البروتوكول متطلبات أكثر صرامة من HTTP/1.0 في لضمان موثوقية تنفيذ معالمه.

الحصول على, وضع, حذف آخر المتبقين من عهد عند طلبة السنة الثانية يعتقد أن صفحة ويب يمكن تخفيض عدد قليل من hoighty تصر المبادئ.

في الوقت الحاضر, معظم صفحات الويب مركب الكيانات التي تحتوي على بعض أو كل هذه البدائية العمليات.على سبيل المثال صفحة يمكن أن يكون استمارات عرض أو تحديث معلومات العملاء التي ربما تمتد عدد من الجداول.

أنا عادة استخدام $_REQUEST[] في php, لا يهتم حقا كم المعلومات التي وصلت.وأود أن اختيار استخدام أو الحصول على وضع أساليب بناء على الكفاءة وليس الكامنة (متعددة) النماذج.

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