इससे पहले कि आप मेरा जवाब पढ़ें, मैं कहना चाहूंगा कि मैं @ नील के साथ सहमत था। हमें अपनी लड़ाई चुननी होगी। हम आम तौर पर अपना सर्वश्रेष्ठ प्रदर्शन करना चाहते हैं, लेकिन कभी-कभी चर्चा के लिए बहुत कम जगह होती है और हमें अपनी इच्छा के विरुद्ध निर्णय लेना पड़ता है।
वैसे भी, नील के जवाब में, मुझे एक और बात याद आती है। दस्तावेज़ीकरण । बस यह सुनिश्चित करने के लिए कि डेवलपर्स जानते हैं कि POST अनुरोध /search
सुरक्षित हैं।
ने कहा कि।
1. GET का मौका दें
GET
पहले विकल्प पर विचार करें । इस प्रश्न URL की अधिकतम लंबाई देखें । मूल्यांकन करें कि क्या आपकी सबसे लंबी क्वेरी स्ट्रिंग 2000 वर्णों से लंबी है। यदि यह नहीं है, और आप इसे होने की उम्मीद नहीं करते हैं, तो साथ चलें GET
। यह बदसूरत लग सकता है, लेकिन कम से कम आप URL को बुकमार्क कर सकते हैं और निश्चित रूप से, यह विधि 'शब्दार्थ (बेदखली, सुरक्षित और कैशिंग) से प्राप्त सभी फायदे हैं।
1.1 क्वेरी स्ट्रिंग एन्कोडिंग का प्रयास करें
उदाहरण के लिए, बेस 64 में। यहां तक कि जावास्क्रिप्ट बेस 64 एनकोडिंग का समर्थन करता है ।
यह कैसे काम करता है:
- सभी फ़िल्टर के साथ JSON बनाएँ और इसे सामान्य करें।
- इसे स्ट्रिंग करें
- इसे एनकोड करें
- अनुरोधित परम (
/search?q=SGVsbG8gV29ybGQh....
) के रूप में एन्कोड किए गए JSON भेजें ।
- सर्वर-साइड पर, परम q को डिकोड करें ।
- JSON स्ट्रिंग का वर्णन करें
पहले, JSON स्ट्रिंग को सबसे लंबे समय तक संभव बनाएं, इसे एनकोड करें और लंबाई लें। मूल्यांकन करें कि क्या एन्कोडेड स्ट्रिंग URL में फिट बैठता है। मैंने आपको परीक्षण करने के लिए Fiddle.js पर निम्नलिखित स्निपेट लागू किया है । (मुझे आशा है कि यह अभी भी काम करता है) 1
बेस 64 एनकोडिंग नियतात्मक और प्रतिवर्ती हैं, इसलिए टक्कर के लिए कोई मौका नहीं है।
एन्कोडेड प्रश्नों के साथ, हम DB में खोजों को भी सहेज सकते हैं, URL को बुकमार्क कर सकते हैं, लिंक साझा कर सकते हैं, आदि। और, निश्चित रूप से, हमें स्ट्रिंग से बचने / अनस्केप करने की आवश्यकता नहीं है।
1.2 उपनाम के साथ प्रयास करें
REST API को डिज़ाइन करने के तरीके के बारे में इस ब्लॉग को पढ़कर , मुझे एक और विकल्प याद आया। सामान्य प्रश्नों के लिए उपनाम ।
मुझे लगता है कि ये अगले कारणों के लिए दिलचस्प होंगे
क्वेरी स्ट्रिंग लंबाई को छोटा करें। यह एपीआई क्लीनर और उपयोगकर्ता के अनुकूल बनाता है
GET / टिकट / स्टेटस = बंद और बंद किया गया = xxx बनाम
GET / टिकट / हाल ही में बंद /
अधिक उपनाम या अधिक अनुरोध पैरामीटर के साथ संयोजन।
GET / टिकट / स्टेटस = बंद और बंद किया गया = xxx और भीतर = 30min बनाम
GET / टिकट / हाल ही में बंद / भीतर = 30min?
हम उपनामित क्वेरी स्ट्रिंग्स के साथ उपनाम जोड़ सकते हैं
प्राप्त / टिकट /? स्थिति = बंद कर दिया और closedAt = xxx और भीतर = 30 मिनट बनाम
प्राप्त / टिकट / हाल ही में बंद कर दिया /? Q = SGVsbG8g ...
1: मैंने JSON का उपयोग किया है, लेकिन जैसे ही हम सर्वर-साइड पर इसे डीस्सरलाइज़ कर सकते हैं, हम अन्य प्रारूपों का उपयोग कर सकते हैं।
search?q=t
,search?q=te
,search?q=test
, और इतने पर। अपने सर्वर को नुकसान पहुंचाने से बचने के लिए क्वेरी कितनी बार भेजी जाती है, इसे सीमित करने पर विचार करें। तुम भी वैकल्पिक रूप से जानकारी का एक बड़ा सौदा लौट सकते हैं और ग्राहक की ओर से फ़िल्टरिंग करते हैं। यदि उपयोगकर्ता व्यापक श्रेणियों में प्रवेश करता है तो यह अच्छी तरह से काम करता है जो चीजों को बहुत कम कर सकता है।