HTTP दो गुणों के बीच अंतर करता है:
निम्नानुसार कल्पना को परिभाषित किया गया है:
तरीकों में भी " बेकारता " की संपत्ति हो सकती है (एक तरफ त्रुटि या समाप्ति मुद्दों से) एन> 0 के समान प्रभाव के समान अनुरोध एक ही अनुरोध के लिए समान है। तरीकों GET, HEAD, PUTऔर DELETEइस संपत्ति को साझा करें। इसके अलावा, तरीकों OPTIONSऔर TRACE SHOULD के साइड इफेक्ट्स नहीं हैं, और इसलिए स्वाभाविक रूप से उदासीन हैं।
और सुरक्षा:
विशेष रूप से, सम्मेलन की स्थापना की गई है कि GETऔर HEADतरीकों को पुनर्प्राप्ति के अलावा अन्य कार्रवाई करने का महत्व नहीं है। इन तरीकों को " सुरक्षित " माना जाना चाहिए । यह उपयोगकर्ता एजेंटों को अन्य तरीकों का प्रतिनिधित्व करने की अनुमति देता है, जैसे कि POST, PUTऔर DELETE, एक विशेष तरीके से, ताकि उपयोगकर्ता को इस तथ्य से अवगत कराया जाए कि संभवतः एक असुरक्षित कार्रवाई का अनुरोध किया जा रहा है।
स्वाभाविक रूप से, यह सुनिश्चित करना संभव नहीं है कि GETअनुरोध करने के परिणामस्वरूप सर्वर साइड-इफेक्ट उत्पन्न न करे ; वास्तव में, कुछ गतिशील संसाधन एक विशेषता मानते हैं। यहां महत्वपूर्ण अंतर यह है कि उपयोगकर्ता ने साइड-इफेक्ट्स का अनुरोध नहीं किया था, इसलिए उन्हें उनके लिए जिम्मेदार नहीं ठहराया जा सकता है।
ध्यान दें कि सुरक्षा का अर्थ है कि बेरोजगारी: यदि किसी विधि का कोई साइड-इफेक्ट नहीं है, तो इसे कई बार प्रदर्शन करने पर एक ही साइड-इफ़ेक्ट प्राप्त होगा, जैसा कि एक बार करने के बाद।
यह तरीकों को तीन श्रेणियों में रखता है:
- सुरक्षित (और इस प्रकार भी idempotent):
GET, HEAD, OPTION,TRACE
- idempotent लेकिन जरूरी सुरक्षित नहीं:
PUT,DELETE
- न तो निष्प्राण और न ही सुरक्षित:
POST
किसी भी पक्ष को प्रभावित करने के लिए PUT की आवश्यकता है।
यह गलत है। PUTआलसी है, लेकिन सुरक्षित नहीं है। पूरे मुद्दे का PUTएक पक्ष प्रभाव है, अर्थात् एक संसाधन अद्यतन करने है। क्या आदर्शता का अर्थ है कि एक ही संसाधन को एक ही सामग्री के साथ कई बार अपडेट करना एक ही प्रभाव होना चाहिए क्योंकि इसे केवल एक बार अपडेट करना।
सुरक्षा के बारे में अनुभाग में अंतिम पैराग्राफ पर ध्यान दें [जोर मेरा]:
स्वाभाविक रूप से, यह सुनिश्चित करना संभव नहीं है कि GETअनुरोध करने के परिणामस्वरूप सर्वर साइड-इफेक्ट उत्पन्न न करे ; वास्तव में, कुछ गतिशील संसाधन एक विशेषता मानते हैं। यहाँ महत्वपूर्ण अंतर यह है कि उपयोगकर्ता ने साइड-इफ़ेक्ट का अनुरोध नहीं किया है, इसलिए उनके लिए जवाबदेह नहीं ठहराया जा सकता है ।
यद्यपि यह वाक्य GETसुरक्षा और सुरक्षा के बारे में बात करता है , हम यह मान सकते हैं कि लेखकों का भी यही मतलब था कि वे इसी तरह के तर्क PUTऔर शालीनता को लागू करें । IOW: नामांकित संसाधन को अपडेट करने के लिए PUTकेवल एक उपयोगकर्ता-दृश्यमान साइड-इफेक्ट होना चाहिए । इसके अन्य दुष्प्रभाव हो सकते हैं, लेकिन उपयोगकर्ता को उनके लिए जिम्मेदार नहीं ठहराया जा सकता है।
उदाहरण के लिए, तथ्य यह PUTहै कि बेकार है का मतलब है कि मैं इसे जितनी बार चाहे उतनी बार रिटायर कर सकता हूं: कल्पना यह गारंटी देती है कि इसे कई बार निष्पादित करना बिल्कुल एक बार इसे निष्पादित करने के समान होगा। यह उन कई PUTअनुरोधों के साइड-इफेक्ट के रूप में पुराने संशोधनों का एक बैकलॉग बनाने के लिए पूरी तरह से वैध है । हालाँकि, यदि, कई रिट्रीट के परिणामस्वरूप, आपका डेटाबेस पुराने संशोधनों के बैकलॉग से भर जाता है, तो यह मेरी समस्या नहीं है, यह आपका है।
IOW: आपको जितने चाहें उतने साइड-इफ़ेक्ट करने की अनुमति है, लेकिन
- यह उपयोगकर्ता को यह देखना होगा कि क्या उनके अनुरोध बेकार थे
- आप उन दुष्प्रभावों के लिए जिम्मेदार हैं, न कि उपयोगकर्ता