2010-08-01 8 views
12

चूंकि पोस्ट/रीडायरेक्ट/जीईटी (पीआरजी) पैटर्न में POST अनुरोध सफलतापूर्वक एक रीडायरेक्ट (303 See Other) स्थिति कोड देता है, तो यह सूचित करना संभव है सफलता के विशिष्ट स्वाद के ग्राहक का आनंद लेना है (उदाहरण के लिए, ठीक, बनाया गया, स्वीकार्य, आदि) साथ ही साथ कोई उपयुक्त शीर्षलेख (उदाहरण के लिए Location201 Created के लिए, जो रीडायरेक्ट के साथ संघर्ष कर सकता है)?पोस्ट/रीडायरेक्ट/जीईटी (पीआरजी) बनाम सार्थक 2xx प्रतिक्रिया कोड

क्या यह उचित हो सकता है, उदाहरण के लिए, रीडायरेक्ट किए गए जीईटी को उचित प्रतिक्रिया कोड & शीर्षकों के साथ प्रतिक्रिया दें जो पोस्ट प्रतिक्रिया से अपेक्षित होंगे?

HTTP 1.1 कल्पना का कहना है:

इस विधि [303] मुख्य रूप से मौजूद है एक चयनित संसाधन के लिए उपयोगकर्ता एजेंट रीडायरेक्ट करने के लिए किसी POST- सक्रिय स्क्रिप्ट का आउटपुट अनुमति देने के लिए।

लेकिन अधिक सामान्य स्थिति कोड और शीर्षलेखों के नुकसान में कोई अंतर्दृष्टि प्रदान नहीं करता है।

संपादित करें - एक उदाहरण:

एक ग्राहक जो /orders/1 पर एक नया संसाधन बनाता /orders को पोस्ट अनुरोध भेजता है।

सर्वर location: /orders/1 के साथ एक 201 Created स्थिति है, क्योंकि यह जानता संसाधन बनाया गया था एक स्वचालित ग्राहक खुश हो जाएगा, और यह पता है, जहां यह है, लेकिन एक मानव एक वेब ब्राउज़र का उपयोग दुखी हो जाएगा, क्योंकि वे मिल भेजता है पेज /orders दोबारा, और यदि वे इसे रीफ्रेश करते हैं तो वे एक और ऑर्डर भेजने जा रहे हैं, जो कि वे चाहते हैं कि वे होने की संभावना नहीं है।

यदि सर्वरस्थिति location: /orders/1 के साथ भेजता है तो मनुष्यों को उनके अस्तित्व और राज्य के बारे में सूचित किया जाएगा, और दुर्घटना से इसे दोहराने का खतरा नहीं होगा। स्वचालित क्लाइंट, हालांकि, संसाधन के निर्माण के स्पष्ट रूप से नहीं बताया जाएगा, इसे location शीर्षलेख के आधार पर निर्माण का अनुमान लगाना होगा। इसके अलावा, अगर 303 कहीं और रीडायरेक्ट करता है (उदाहरण के लिए /users/someusername/orders) मानव अच्छी तरह से व्यवस्थित हो सकता है, लेकिन स्वचालित क्लाइंट को अत्यधिक अनौपचारिक छोड़ दिया गया है।

मेरे सुझाव 201 Created नए संसाधन पर रीडायरेक्ट अनुरोध के जवाब के रूप में भेजने के लिए गया था, लेकिन अधिक मैं इसके बारे में सोचो, कम मुझे यह पसंद है (सुनिश्चित करने के लिए केवल निर्माता 201 प्राप्त करता है मुश्किल हो सकता है और यह यह नहीं दिखाना चाहिए कि GET अनुरोध ने संसाधन बनाया)।

इस स्थिति में इष्टतम प्रतिक्रिया क्या है?

+0

क्या आप इस बारे में सोचा है कि आपने क्या सोचा था? – Gumbo

+0

मैंने एक उदाहरण प्रदान करने के लिए प्रश्न संपादित किया है। धन्यवाद। –

+0

बस स्पष्ट होने के लिए: आप पहले से ही यह सुनिश्चित कर चुके हैं कि एक मानव उपयोगकर्ता को अभी क्या हुआ है, इस बारे में अच्छी तरह से सूचित किया जाएगा, और अब आप एक स्वचालित के लिए ऐसा करने की कोशिश कर रहे हैं? – sdleihssirhc

उत्तर

1

यदि आपके पास वेब सर्वर पर नियंत्रण है, तो एजेंट हेडर के बीच अंतर करने के बारे में कैसे? इसे केवल उस चीज़ में भरें जिसे आप जानते हैं (एक GUID या अन्य छद्म-यादृच्छिक चीज़) और स्वचालित क्लाइंट से वेबसर्वर को प्रस्तुत करें। उसके बाद 201/303 के अनुसार वेबसर्वर प्रतिक्रिया है।

3

एचटीएमएल के रूप में प्रतिक्रिया शरीर में मानव लक्षित जानकारी भेजें। उपयोगकर्ता-एजेंट शीर्षलेख पर अंतर न करें; यदि आपको मशीनों को निकायों को भेजने की भी आवश्यकता है, तो स्वीकृति अनुरोध हेडर के आधार पर अंतर करें।

संबंधित मुद्दे