2014-10-15 13 views
5

मैं अपने आवेदन के लिए एक आरईएसटी एपीआई विकसित कर रहा हूं।एक ही अनुरोध में एकाधिक आरईएसटी एपीआई अनुरोध का संयोजन?

इस एपीआई के साथ मैं पुट companies/1 और PUT persons/2, families/3, आदि का उपयोग कर कंपनी या व्यक्ति विवरण अपडेट करने जैसी चीजें कर सकता हूं।

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

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

क्या विलंबता से बचने के लिए एक अनुरोध में आरईएसटी एपीआई को कई अलग-अलग अनुरोधों को जोड़ने के लिए सबसे अच्छा अभ्यास है या इस तरह की स्थिति को संभालने के लिए सामान्य रूप से एक बेहतर तरीका है?

उत्तर

1

लेटेंसी केवल अनुरोधों की श्रृंखला द्वारा जोड़ती है। समांतर अनुरोधों का उपयोग समस्या को हल करेगा।

यहां कोई सर्वोत्तम अभ्यास नहीं है।

  • आप संग्रह में एकाधिक आइटम के साथ पैच भेज सकते हैं।
    PATCH /companies [{id:1, ...}, {id: 2, ...}, ...]
  • आप एक समग्र संग्रह को परिभाषित कर सकते हैं जिसमें विभिन्न प्रकार के आइटम शामिल हो सकते हैं।
    PATCH /resources [{id: 1, "rdf:type": "app:Company", ...}, {...}]

मैं उनमें से न तो पसंद नहीं है, लेकिन वह सिर्फ एक राय है ...

+0

समानांतर अनुरोधों बहुत मदद करते हैं। मैं अनुरोध करने के लिए 'curl' (PHP) का उपयोग कर रहा था और कॉल को अवरुद्ध करने पर क्रमशः ~ 5x और ~ 10x प्रदर्शन सुधार के साथ समानांतर और आग और अनुरोध दोनों के लिए' curl_multi' के लिए समर्थन जोड़ा है। – Martijn

+1

हूप्स। लगता है विलंबता एकमात्र समस्या नहीं है। समानांतर में हजारों अनुरोध भेजना कुछ प्रकार के डीडीओएस पहचान को ट्रिगर करता है। – Martijn

+0

प्रत्येक सिस्टम की सीमाएं हैं ... ;-) – inf3rno

2

Google की Gmail एपीआई एक बहुत ठोस, पुन: प्रयोज्य एपीआई के साथ इस का समर्थन करता है,।

https://developers.google.com/gmail/api/guides/batch

लंबी कहानी संक्षेप में, अपने एपीआई एक POST /batch समाप्ति बिंदु है, और अनुरोध शरीर में, आप कई HTTP अनुरोध भेजें। प्रतिक्रियाओं को समान रूप से एन्कोड किया जाएगा।
इसके लिए सर्वर-साइड और क्लाइंट-साइड लॉजिक की आवश्यकता होती है, लेकिन यह बहुत सामान्य और बहुत पुन: प्रयोज्य होगी।

उदाहरण:

POST /batch HTTP/1.1 
Content-Type: multipart/mixed; boundary=batch_foobarbaz 
Content-Length: total_content_length 

--batch_foobarbaz 
Content-Type: application/http 

GET /farm/v1/animals/pony 

--batch_foobarbaz 
Content-Type: application/http 

PUT /farm/v1/animals/sheep 
Content-Type: application/json 
Content-Length: part_content_length 
If-Match: "etag/sheep" 

{ 
    "animalName": "sheep", 
    "animalAge": "5" 
    "peltColor": "green", 
} 

--batch_foobarbaz 
Content-Type: application/http 

GET /farm/v1/animals 
If-None-Match: "etag/animals" 

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