RESTFul: राज्य बदलने की कार्रवाई


59

मैं RESTfull API बनाने की योजना बना रहा हूं, लेकिन कुछ वास्तु प्रश्न हैं जो मेरे सिर में कुछ समस्याएं पैदा कर रहे हैं। ग्राहकों के लिए बैकेंड बूसी लॉजिक जोड़ना यह विकल्प है कि मैं बचना चाहूंगा क्योंकि कई क्लाइंट प्लेटफ़ॉर्म को अपडेट करने के लिए वास्तविक समय में बनाए रखना मुश्किल होता है जब बिजनेस लॉजिक तेजी से बदल सकता है।

हम कहते हैं कि हमारे पास एक संसाधन (एपीआई / लेख) के रूप में लेख है, हमें प्रकाशन, अप्रकाशित, सक्रिय या निष्क्रिय करने जैसी क्रियाओं को कैसे लागू करना चाहिए लेकिन इसे यथासंभव सरल रखने का प्रयास करना चाहिए?

1) क्या हमें api / article / {id} / {क्रिया} का उपयोग करना चाहिए क्योंकि बहुत सारे बैकएंड लॉजिक वहाँ हो सकते हैं जैसे कि दूरस्थ स्थानों पर धकेलना या कई गुणों को बदलना। संभवतः यहाँ सबसे कठिन बात यह है कि हमें अद्यतन करने के लिए एपीआई पर सभी लेख डेटा वापस भेजने की आवश्यकता है और बहुउपयोगी कार्य को लागू नहीं किया जा सकता है। उदाहरण के लिए, संपादक 5 सेकंड पुराना डेटा भेज सकता है और यह तय कर सकता है कि कुछ अन्य पत्रकार ने सिर्फ 2 सेकंड पहले किया था और कोई रास्ता नहीं है कि मैं ग्राहकों को समझा सकता हूं क्योंकि लेख प्रकाशित करने वाला वास्तव में किसी भी तरह से सामग्री को अपडेट करने से जुड़ा नहीं है।

2) नया संसाधन बनाना भी एक विकल्प हो सकता है, एपीआई / आर्टिकल- {एक्शन} / आईडी, लेकिन फिर लौटाया गया संसाधन आर्टिकल- {एक्शन} नहीं होगा, लेकिन आर्टिकल जो कि यह सही नहीं है, तो मुझे यकीन नहीं होगा। इसके अलावा सर्वर साइड कोड आर्टिकल क्लास में संसाधन पर एक्टुअल काम को संभालना है और मुझे यकीन नहीं है कि अगर यह Restfull सोच के खिलाफ है

किसी भी सुझाव का स्वागत किया है ..


यदि वे एक क्रिया / एल्गोरिथम का प्रदर्शन करते हैं, तो 'कार्रवाई' का होना एक वैध URI का हिस्सा होना पूरी तरह से कानूनी है। इसमें गलत क्या है api/article?action=publish? क्वेरी पैरामीटर ऐसे मामलों के लिए अभिप्रेत हैं जहाँ संसाधन की स्थिति आपके द्वारा उल्लिखित 'एल्गोरिथम' (या क्रिया) पर निर्भर है। जैसे api/articles?sort=ascवैध है
PhD

1
मेरा सुझाव है कि आप इस राइट-अप की जांच करें , जो आपको और भी अधिक समाधान के साथ प्रेरित कर सकता है ।
बेंजोल

आपी / लेख के साथ मुझे जो समस्याएँ दिख रही हैं उनमें से एक है? कार्रवाई = प्रकाशित यह है कि RESTfull एप्लिकेशन में प्रकाशन के लिए सभी लेख डेटा भेजना चाहिए, जबकि मैं बस यही करना पसंद करूंगा: एपीआई / लेख / 4545 / प्रकाशित / बिना कुछ अतिरिक्त प्रकाशित किए
Miro Svrtit

2
इस मुद्दे पर उत्कृष्ट संसाधन और अधिक: REST API Design - संसाधन मॉडलिंग
इज़्हाकी

@PhD: जब यह प्रोटोकॉल में पूरी तरह से कानूनी है, तो URI को आमतौर पर क्रिया के बजाय संज्ञा होना चाहिए। URI में एक क्रिया का होना आमतौर पर खराब REST डिज़ाइन का संकेत है।
रेयान

जवाबों:


49

मुझे लगता है कि यहाँ वर्णित अभ्यास सहायक हैं:

उन कार्यों के बारे में क्या जो CRUD संचालन की दुनिया में फिट नहीं हैं?

यह वह जगह है जहां चीजें फजी हो सकती हैं। कई दृष्टिकोण हैं:

  1. संसाधन के एक क्षेत्र की तरह प्रकट होने के लिए क्रिया का पुनर्गठन करें। यह काम करता है अगर कार्रवाई पैरामीटर नहीं लेती है। उदाहरण के लिए एक सक्रिय क्रिया को बूलियन activatedफ़ील्ड में मैप किया जा सकता है और संसाधन के माध्यम से पाच के माध्यम से अद्यतन किया जा सकता है ।
  2. इसे Restful सिद्धांतों के साथ उप-संसाधन की तरह व्यवहार करें। उदाहरण के लिए, GitHub की API आपको एक gist को स्टार देती है PUT /gists/:id/starऔर साथ अनस्टार करती है DELETE /gists/:id/star
  3. कभी-कभी आपके पास कार्रवाई को समझदार Restful संरचना में मैप करने का कोई तरीका नहीं होता है। उदाहरण के लिए, एक बहु-संसाधन खोज वास्तव में एक विशिष्ट संसाधन के समापन बिंदु पर लागू होने का कोई मतलब नहीं है। इस मामले में, /searchयह सबसे अधिक समझ में आता है, भले ही यह एक संसाधन न हो। यह ठीक है - बस एपीआई उपभोक्ता के दृष्टिकोण से सही है और भ्रम से बचने के लिए स्पष्ट रूप से प्रलेखित है सुनिश्चित करें।

मैं दृष्टिकोण के लिए मतदान करता हूं 2. जबकि यह एपीआई कॉलर्स के लिए अनाड़ी कृत्रिम संसाधनों की तरह लग सकता है, वास्तव में उन्हें कोई ज्ञान नहीं है कि सर्वर पर क्या हो रहा है। अगर मैं /article/123/deactivationsआर्टिकल 123 के लिए एक नया डिएक्टिवेशन रिक्वेस्ट बनाने के लिए POST कहता हूं , तो हो सकता है कि सर्वर न केवल रिक्वेस्ट रिसोर्स को डीएक्टिवेट कर दे, बल्कि वास्तव में मेरे डिएक्टिवेशन रिक्वेस्ट को स्टोर कर ले, ताकि बाद में मैं उसका स्टेटस रिसीव कर सकूं।
जस्टअमार्टिन

2
क्यों PUT /gists/:id/star नहीं POST /gists/:id/star?
फ़िलिप बार्टुज़ि

9
@FilipBartuzi क्योंकि PUT लाजिमी है - अर्थात, चाहे आप कितनी ही बार एक ही पैरामीटर के साथ कोई क्रिया क्यों न करें, परिणाम हमेशा एक ही होता है (उदाहरण के लिए यदि आप एक लाइट को बंद करके चालू करते हैं, तो यह बदल जाता है। यदि आप चालू करने का प्रयास करते हैं। यह फिर से, कुछ भी नहीं बदलता है - यह पहले से ही है)। POST एक आदर्श नहीं है - अर्थात, हर बार जब आप कोई कार्रवाई करते हैं, तो भी एक ही पैरामीटर के साथ, कार्रवाई का एक अलग परिणाम होता है (जैसे यदि आप किसी को एक पत्र भेजते हैं, तो उस व्यक्ति को एक पत्र मिला है। यदि आप एक समान पत्र भेजते हैं। एक ही व्यक्ति, उनके पास अब 2 पत्र हैं)।
राफेल

9

ऑपरेशन में प्रमुख स्थिति और व्यवहार में परिवर्तन के परिणामस्वरूप ऑपरेशन "प्रकाशित" जैसी कार्रवाई का वर्णन करते हैं, जो कि REST में स्पष्ट रूप से मॉडल करना मुश्किल है। एक समाधान जो मैं अक्सर देखता हूं, वह इस तरह के जटिल व्यवहार को डेटा के माध्यम से ड्राइव करना है।

एक ऑनलाइन व्यापारी द्वारा उजागर की गई REST API के माध्यम से सामान ऑर्डर करने पर विचार करें। आदेश देना एक जटिल ऑपरेशन है। कई उत्पादों को पैक और भेज दिया जाएगा, आपके खाते से शुल्क लिया जाएगा, और आपको एक रसीद मिलेगी। आप सीमित समय के लिए अपने आदेश को रद्द कर सकते हैं और निश्चित रूप से एक पूर्ण धन वापस गारंटी है जो आपको एक वापसी के लिए उत्पादों को वापस भेजने की अनुमति देता है।

एक जटिल खरीद संचालन के बजाय, ऐसा एपीआई आपको एक नया संसाधन, एक खरीद आदेश बनाने की अनुमति दे सकता है। शुरुआत में आप अपनी इच्छानुसार कोई भी संशोधन कर सकते हैं: उत्पादों को जोड़ें या हटाएं, शिपिंग पता बदलें, दूसरा भुगतान विकल्प चुनें, या अपना ऑर्डर पूरी तरह से रद्द कर दें। आप ये सब कर सकते हैं क्योंकि आपने अभी तक कुछ भी नहीं खरीदा है, आप सर्वर पर कुछ डेटा में हेरफेर कर रहे हैं।

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

आपके विवरण के आधार पर, "प्रकाशित" को इस तरह से लागू किया जा सकता है। किसी ऑपरेशन को उजागर करने के बजाय, आप अपने द्वारा तैयार किए गए मसौदे की एक प्रति रखते हैं और एक नए संसाधन के रूप में प्रकाशित / प्रकाशित करना चाहते हैं। ड्राफ्ट के किसी भी बाद के अद्यतन की गारंटी नहीं दी जाती है भले ही प्रकाशित ऑपरेशन खुद ही घंटों बाद पूरा हो।


अप्रकाशित लेख से ड्राफ्ट तक पूरे संसाधन को बदलने का विचार बिल्कुल इस मामले में फिट होगा, लेकिन सामान्य रूप से संसाधन पर मौजूद अन्य सभी कार्यों के लिए उपयुक्त नहीं होगा। क्या इसे संभालने के लिए REST भी है? शायद मैं इसे गाली दे रहा हूं और इसे केवल सीआरयूडी के रूप में उपयोग करना चाहिए और एसक्यूएल प्रश्नों की तरह और कुछ नहीं, जहां मुझे किसी भी तर्क की क्वेरी के अंदर होने की उम्मीद नहीं है।
मिरो Svrtan

मैं यह सब क्यों पूछ रहा हूं? खैर कुछ समय पहले से वेब एप्स को मल्टीप्लेट किया जाना शुरू हो गया था और मैं सर्वर पर बहुत सारे बूसिंस लॉजिक रखना पसंद करूंगा क्योंकि आईओएस, एंड्रॉइड, वेब, डेस्कटॉप या जो भी अन्य प्लेटफॉर्म पर ब्युजनेस लॉजिक को अपडेट करता है, उसे करना बहुत असंभव है जल्दी और मैं बीएल के कुछ छोटे टुकड़े को बदलते समय पीछे की संगतता की सभी समस्याओं से बचना चाहूंगा।
मिरो Svrtan

2
मुझे लगता है कि REST व्यवसाय तर्क को ठीक तरह से संभाल सकता है, लेकिन ऐसा नहीं है कि REST को ध्यान में रखे बिना लिखे गए मौजूदा व्यावसायिक तर्क को उजागर करने के लिए उपयुक्त है। यही कारण है कि Microsoft, SAP, और अन्य जैसी कई कंपनियां अक्सर CRUD संचालन के साथ केवल डेटा को उजागर करती हैं, जैसा आपने कहा था। ओपन डेटा प्रोटोकॉल पर एक नज़र डालें कि वे कैसे करते हैं।
फेरेंक मिहली

7

हमें अद्यतन करने के लिए एपीआई पर सभी लेख डेटा वापस भेजने की आवश्यकता है और बहुउपयोगी कार्य को लागू नहीं किया जा सकता है। उदाहरण के लिए, संपादक 5 सेकंड पुराना डेटा भेज सकता है और यह तय कर सकता है कि कुछ अन्य पत्रकार ने सिर्फ 2 सेकंड पहले किया था और कोई रास्ता नहीं है कि मैं ग्राहकों को समझा सकता हूं क्योंकि लेख प्रकाशित करने वाला वास्तव में किसी भी तरह से सामग्री को अपडेट करने से जुड़ा नहीं है।

इस तरह की बात यह है कि आप जो भी करते हैं, वह एक चुनौती है, यह वितरित स्रोत नियंत्रण (मर्क्यूरियल, गिट, आदि) के लिए एक समान समस्या है, और समाधान, HTTP / ReST में वर्तनी, थोड़ा समान दिखता है।

मान लें कि आपको दो उपयोगकर्ता मिले हैं, ऐलिस और बॉब, दोनों काम कर रहे हैं /articles/lunch। (स्पष्टता के लिए, प्रतिक्रिया निर्भीक है)

सबसे पहले, ऐलिस लेख बनाता है।

PUT /articles/lunch HTTP/1.1
Host: example.com
Content-Type: text/plain
Authorization: Basic YWxpY2U6c2VjcmV0

Hey Bob, what do you want for lunch today?

301 Moved Permanently
Location: /articles/lunch/1 

सर्वर ने एक संसाधन नहीं बनाया, क्योंकि अनुरोध के साथ कोई "संस्करण" नहीं जुड़ा था, (पहचानकर्ता मानकर) /articles/{id}/{version}सृजन करने के लिए, ऐलिस को उस लेख / संस्करण के यूआरएल पर रीडायरेक्ट किया गया था जिसे वह बना रहा होगा। ऐलिस का उपयोगकर्ता। एजेंट नए पते पर फिर से अनुरोध करेगा।

PUT /articles/lunch/1 HTTP/1.1
Host: example.com
Content-Type: text/plain
Authorization: Basic YWxpY2U6c2VjcmV0

Hey Bob, what do you want for lunch today?

201 Created

और अब लेख बनाया गया है। अगला, बॉब लेख को देखता है:

GET /articles/lunch HTTP/1.1
Host: example.com
Authorization: Basic Ym9iOnBhc3N3b3Jk

301 Moved Permanently
Location: /articles/lunch/1 

बॉब वहां दिखता है:

GET /articles/lunch/1 HTTP/1.1
Host: example.com
Authorization: Basic Ym9iOnBhc3N3b3Jk

200 Ok
Content-Type: text/plain

Hey Bob, what do you want for lunch today?

वह अपना परिवर्तन जोड़ने का फैसला करता है।

PUT /articles/lunch/1 HTTP/1.1
Host: example.com
Content-Type: text/plain
Authorization: Basic Ym9iOnBhc3N3b3Jk

Hey Bob, what do you want for lunch today?
Does pizza sound good to you, Alice?

301 Moved Permanently
Location: /articles/lunch/2

ऐलिस के साथ, बॉब को पुनर्निर्देशित किया जाता है, जहां वह एक नया संस्करण तैयार करेगा।

PUT /articles/lunch/2 HTTP/1.1
Host: example.com
Content-Type: text/plain
Authorization: Basic Ym9iOnBhc3N3b3Jk

Hey Bob, what do you want for lunch today?
Does pizza sound good to you, Alice?

201 Created

अंत में, एलिस ने फैसला किया कि वह अपने लेख में जोड़ना चाहेगी:

PUT /articles/lunch/1 HTTP/1.1
Host: example.com
Content-Type: text/plain
Authorization: Basic YWxpY2U6c2VjcmV0

Hey Bob, what do you want for lunch today?
I was thinking about getting Sushi.

409 Conflict
Location: /articles/lunch/3
Content-Type: text/diff

---/articles/lunch/2
+++/articles/lunch/3
@@ 1,2 1,2 @@
 Hey Bob, what do you want for lunch today?
-Does pizza sound good to you, Alice?
+I was thinking about getting Sushi.

सामान्य के रूप में पुनर्निर्देशित किए जाने के बजाय, एक अलग स्थिति कोड क्लाइंट को वापस कर दिया जाता है 409, जो ऐलिस को बताता है कि वह जिस संस्करण से शाखा करने की कोशिश कर रहा था, वह पहले से ही शाखा में है। नए संसाधनों को वैसे भी बनाया गया था (जैसा कि Locationहेडर द्वारा दिखाया गया है ), और प्रतिक्रिया बॉडी में दोनों के बीच अंतर शामिल था। ऐलिस अब जानती है कि उसने जो अनुरोध किया था, उसे कुछ विलय करने की आवश्यकता है।


यह सभी पुनर्निर्देशन के शब्दार्थों से संबंधित है PUT, जिसके लिए नए संसाधनों का निर्माण ठीक उसी तरह होना चाहिए, जहां अनुरोध रेखा पूछती है। यह POSTइसके बजाय एक अनुरोध चक्र को भी बचा सकता है , लेकिन फिर संस्करण संख्या को किसी अन्य जादू द्वारा अनुरोध में एनकोड करना होगा, जो मुझे चित्रण के प्रयोजनों के लिए कम स्पष्ट लग रहा था, लेकिन शायद अभी भी एक वास्तविक एपीआई में पसंद किया जाएगा अनुरोध / प्रतिक्रिया चक्र को कम करने के लिए।


1
Versoning यहाँ कोई समस्या नहीं थी, मैंने इसे संभावित समस्याओं के उदाहरण के रूप में कहा था यदि प्रकाशन कार्रवाई के लिए एक संसाधन के रूप में लेख का उपयोग किया जाए
Miro Svrtan

3

यहां एक और उदाहरण दिया गया है जो दस्तावेजों की सामग्री के साथ नहीं बल्कि क्षणिक स्थिति से संबंधित है। (मुझे लगता है कि वर्जनिंग - यह देखते हुए कि सामान्य रूप से, प्रत्येक संस्करण एक नया संसाधन हो सकता है - एक तरह की आसान समस्या।)

मान लीजिए कि मैं मशीन पर चलने वाली एक सेवा को REST के माध्यम से उजागर करना चाहता हूं ताकि इसे रोका जा सके, शुरू किया जा सके, फिर से शुरू किया जा सके, और इसके बाद।

यहां सबसे अधिक उपयोगी दृष्टिकोण क्या है? उदाहरण के लिए POST / सेवा? कमांड = पुनः आरंभ करें? या POST / सेवा / एक निकाय के साथ राज्य, कहते हैं, 'चल रहा है'?

यहाँ सर्वोत्तम प्रथाओं को संहिताबद्ध करना अच्छा होगा और क्या REST इस प्रकार की स्थिति के लिए सही दृष्टिकोण है।

दूसरा, मान लें कि मैं एक ऐसी सेवा से कुछ कार्रवाई करना चाहता हूं जो अपने स्वयं के राज्य को प्रभावित नहीं करती है, बल्कि एक साइड इफेक्ट को ट्रिगर करती है। उदाहरण के लिए, एक मेलर सेवा जो ईमेल पते के एक समूह को कॉल के समय निर्मित एक रिपोर्ट भेजती है।

GET / रिपोर्ट स्वयं रिपोर्ट की एक प्रति प्राप्त करने का एक तरीका हो सकता है; लेकिन क्या होगा अगर हम सर्वर साइड पर आगे बढ़ना चाहते हैं, जैसे कि ईमेलिंग जैसा कि मैं ऊपर कहता हूं। या एक डेटाबेस के लिए लेखन।

ये मामले संसाधन-एक्शन डिवाइड के आसपास नृत्य करते हैं, और मैं उन्हें आरईएसटी-ओरिएंटेड तरीके से निपटने के तरीके देखता हूं, लेकिन स्पष्ट रूप से ऐसा करने के लिए एक हैक की तरह महसूस होता है। शायद अहम सवाल यह है कि क्या REST API को सामान्य रूप से साइड-इफेक्ट्स का समर्थन करना चाहिए।


2

REST डेटा ओरिएंटेड है और ऐसे संसाधन "चीजों" के रूप में सबसे अच्छे से काम करते हैं। HTTP विधियों के निहितार्थ; GET, PUT, DELETE, आदि ओरिएंटेशन को सुदृढ़ करने का काम करते हैं। बेशक, अपवाद है।

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

कार्यान्वयन के संबंध में मैं शायद कुछ ऐसा करूंगा जैसे कि TockenMacGuy सुझाव देता है। मैं लेख में मेटाडेटा फ़ील्ड भी जोड़ूंगा, संशोधन नहीं, जैसे 'लॉक' और 'प्रकाशित'।


1

लेख की स्थिति में सीधे हेरफेर करने के बारे में सोचें नहीं। इसके बजाय, आप एक परिवर्तन आदेश में अनुरोध कर रहे हैं कि लेख बनाया जाए।

आप एक परिवर्तन क्रम में एक नया परिवर्तन आदेश संसाधन (POST) बनाने के रूप में रख सकते हैं। फायदे बहुत हैं। उदाहरण के लिए, आप भविष्य की तारीख और समय निर्दिष्ट कर सकते हैं जब लेख को परिवर्तन क्रम के हिस्से के रूप में प्रकाशित किया जाना चाहिए, और सर्वर को इस बारे में चिंता करने दें कि इसे कैसे लागू किया जाए।

यदि प्रकाशन एक तात्कालिक प्रक्रिया नहीं है, तो आपको ग्राहक के वापस आने से पहले इसके समाप्त होने की प्रतीक्षा करने की आवश्यकता नहीं है। आप बस स्वीकार करते हैं कि परिवर्तन आदेश बनाया गया था और परिवर्तन आदेश आईडी लौटाएं। फिर आप उस परिवर्तन क्रम के अनुरूप URL का उपयोग परिवर्तन आदेश की स्थिति साझा करने के लिए कर सकते हैं।

मेरे लिए एक महत्वपूर्ण अंतर्दृष्टि इस बदलाव के आदेश को पहचान रही थी रूपक वस्तु-उन्मुख प्रोग्रामिंग का वर्णन करने का सिर्फ एक और तरीका है। संसाधनों के बजाय, हम वस्तुओं को कहते हैं। परिवर्तन आदेशों के बजाय, हम उन्हें संदेश कहते हैं। OO में A से B तक संदेश भेजने का एक तरीका यह है कि B पर A कॉल विधि हो। इसे करने का दूसरा तरीका, विशेषकर जब A और B अलग-अलग कंप्यूटर में हों, तो A को एक नई वस्तु M, और बनाना होगा। B. REST पर भेजें बस उस प्रक्रिया को औपचारिक रूप देता है।


मैं वास्तव में OO की तुलना में अभिनेता मॉडल के करीब इस पर विचार करूंगा। संदेश के रूप में अन्य अनुरोधों को ध्यान में रखते हुए (जो वे हैं) उन्हें प्रबंध राज्य के लिए इवेंट सोर्सिंग में बहुत करीने से संरेखित करता है। REST बड़े करीने से CQRS लाइनों के साथ अपनी बातचीत को विभाजित करता है। GET मैसेज Query, POST, PUT, PATCH, DELETE कमांड एरिया में आते हैं।
विल्ड सेप

0

यदि मैं आपको सही तरीके से समझता हूं, तो मुझे लगता है कि आपके पास एक तकनीकी मुद्दे की तुलना में एक 'व्यावसायिक नियम' का निर्धारण मुद्दा अधिक है।

तथ्य यह है कि एक लेख को अधिलेखित किया जा सकता है प्राधिकरण स्तर पेश करके हल किया जा सकता है जहां वरिष्ठ उपयोगकर्ता जूनियर उपयोगकर्ता के संस्करणों को ओवरराइड कर सकते हैं। इसके अलावा संस्करणों के साथ-साथ लेख की स्थिति (उदाहरण के लिए 'विकास', 'अंतिम' पर कब्जा करने के लिए एक स्तंभ भी शामिल है) आदि), आप इसे दूर कर सकते हैं। आप उपयोगकर्ता को दिए गए संस्करण का चयन करने की क्षमता या तो जमा करने के समय और संस्करण संख्या के आधार पर दे सकते हैं।

उपरोक्त सभी मामलों में, आपकी सेवा को आपके द्वारा निर्धारित व्यावसायिक नियमों को लागू करने की आवश्यकता है। इसलिए आप पैरामीटर के साथ सेवा को कॉल कर सकते हैं: उपयोगकर्ता का नाम, लेख, संस्करण, कार्रवाई (जहां संस्करण वैकल्पिक है, फिर से यह आपके काम पर निर्भर करता है)।


मुझे विश्वास नहीं है कि यह एक बुद्धिमत्ता का नियम है, लेकिन कड़ाई से एक techincal है। संस्करण जोड़ने के साथ विचार ओवरराइडिंग नियमों के साथ मदद करने के लिए एक अच्छा है, लेकिन अभी भी स्थिति को हल नहीं करता है कि सामग्री को अपडेट करना और सामग्री प्रकाशित करना संबंधित कार्य नहीं हैं।
मिरो Svrtan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.