अन्य एपीआई: कस्टम HTTP हेडर बनाम यूआरएल पैरामीटर


96

जब आप REST API के अनुरोध भाग में कस्टम HTTP हेडर का उपयोग करते हैं?

उदाहरण:

क्या आप कभी उपयोग करेंगे?

GET /orders/view 
(custom HTTP header) CLIENT_ID: 23

के बजाय

GET /orders/view/client_id/23 or 
GET /orders/view/?client_id=23

जवाबों:


123

URL संसाधन को इंगित करता है। एक "क्लाइंट" एक ऐसा संसाधन है जिस पर काम किया जा सकता है, इसलिए बेस यूआरएल का हिस्सा होना चाहिए /orders/view/client/23:।

पैरामीटर बस हैं, संसाधन तक पहुंच को पैरामीटर करने के लिए। यह विशेष रूप से पदों और खोजों के साथ खेलने में आता है /orders/find?q=blahblah&sort=foo:। मापदंडों और उप-संसाधनों के बीच एक ठीक रेखा है /orders/view/client/23/active versus /orders/view/client/23?show=active:। मैं खोजों के लिए उप-संसाधन शैली और आरक्षित मापदंडों की सिफारिश करता हूं।

चूंकि प्रत्येक समापन बिंदु एक राज्य हस्तांतरण का प्रतिनिधित्व करता है (mnemonic को नियंत्रित करने के लिए), कस्टम हेडर का उपयोग केवल उन चीजों के लिए किया जाना चाहिए जिसमें संसाधन (url), संसाधन की स्थिति (निकाय), या सीधे मापदंडों का नाम शामिल नहीं है संसाधन (मापदंडों) को प्रभावित करना। कस्टम हेडर के अनुरोध के बारे में सही मेटाडेटा छोड़ देता है।

HTTP में हेडर का एक बहुत विस्तृत चयन है जो आपके लिए आवश्यक सभी चीजों को कवर करता है। मैंने देखा है कि कस्टम हेडर आते हैं, एक सिस्टम में सिस्टम अनुरोध के लिए एक उपयोगकर्ता की ओर से काम करता है। प्रॉक्सी सिस्टम उपयोगकर्ता को मान्य करेगा और X-User: useridहेडर में " " जोड़ देगा और एंडपॉइंट को हिट करने के लिए सिस्टम क्रेडेंशियल्स का उपयोग करेगा। प्राप्त करने वाला सिस्टम यह पुष्टि करता है कि सिस्टम क्रेडेंशियल्स उपयोगकर्ता की ओर से कार्य करने के लिए अधिकृत हैं, फिर मान्य करें कि उपयोगकर्ता कार्रवाई करने के लिए अधिकृत है।


इतने व्यापक उत्तर के लिए धन्यवाद! क्या आप अभी भी एक मोबाइल एपीआई के लिए एक्स-उपयोगकर्ता का उपयोग करेंगे, जहां एक दुष्ट प्रॉक्सी (हेडर से स्ट्रिप्स बंद) होने का जोखिम अभी भी अधिक है?
Vasile Cotovanu

1
नहीं, मैंने जो X-User का उल्लेख किया है वह सिस्टम से सिस्टम कनेक्शन के लिए है जहां सिस्टम किसी तीसरे पक्ष की ओर से कार्य कर रहा है। उदाहरण के लिए, उपयोगकर्ता यू सर्वर ए से बात करता है। सर्वर ए एक्स-यूजर हेडर के साथ सर्वर बी को क्रेडेंशियल प्रस्तुत करता है, यह कहने के लिए कि "मैं यू की ओर से यह कार्रवाई करने के लिए अधिकृत हूं, यह जांचने के लिए मेरी साख का उपयोग करें।" यह सेवा उन्मुख आर्किटेक्चर में आता है, और आमतौर पर आप HTTPS का उपयोग कर रहे हैं। एक मोबाइल प्लेटफ़ॉर्म लगभग हमेशा उपयोगकर्ता का खुद का अभिनय होना चाहिए, और लेन-देन के लिए उपयुक्त पहले व्यक्ति क्रेडेंशियल्स का उपयोग करना चाहिए।
नाल्सकोरवा

7
तीसरा पैराग्राफ सबसे अधिक जानकारीपूर्ण उत्तरों में से एक है जो मैंने SO; ;-) पर पढ़ा है
एलिस्टेयर77

1
@ नीरसकोरवा महान व्याख्या! क्या होगा यदि मैं एक अधिकृत कंटेनर (जैसे मेरा मोबाइल ऐप) के माध्यम से उपयोगकर्ता को अपने एपीआई के साथ बातचीत करना चाहूंगा? अब मैं जो कर रहा हूं वह यह है कि मेरा मोबाइल ऐप अपने आप में कोई भी कार्रवाई करने के लिए अधिकृत नहीं है और न ही अंतिम उपयोगकर्ता .. दोनों क्रेडेंशियल मौजूद होने चाहिए यदि उपयोगकर्ता कार्रवाई करने के लिए तैयार है।
bolbol

6

कस्टम हेडर के निम्नलिखित फायदे हैं:

  • नेटवर्क टूल / स्क्रिप्ट (प्रमाणीकरण, मेटा जानकारी, ...) द्वारा आसानी से पढ़ा जा सकता है
  • सुरक्षा सामानों को सुरक्षित रखता है (सुरक्षित, ब्राउज़र / प्रॉक्सी कैश में नहीं)
  • यूरल्स क्लीनर रखता है: संसाधनों के बेहतर कैशिंग के लिए अनुमति देता है

उन्हें चुपचाप छीन लिया जा सकता है / परदे के पीछे से छाना जा सकता है
फ्यूसी

@fusi अच्छी बात ... यहाँ इसके बारे में विषय है: stackoverflow.com/questions/20820572/…
क्रिस्टोफ़ रूसो

5

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


अगर कोई कार्य पूरा करने के लिए मानक तरीका है, तो पहिए को फिर से समझें।
एलेसेंड्रो शांतििनी

5

आप कब उपयोग करते हैं ... एक HTTP एपीआई के अनुरोध हिस्से में HTTP हेडर?

प्रमाणीकरण: GUID , मूल प्रमाणीकरण, कस्टम टोकन, आदि। जैसे, मूल प्रमाणीकरण उपयोगकर्ता नाम / पासवर्ड के बजाय REST एपीआई के लिए एक गाइड टोकन के साथ

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


1

REST के लिए कोई मानक नहीं है लेकिन स्वीकृत तरीका होगा

GET /orders/view/23

कस्टम हेडर का उपयोग नहीं कर रहा है और इसलिए 23 के बाद माना जाता है कि यह आईडी है इसलिए आपके पास एक फ़ंक्शन होगा जो आईडी में ले जाता है और इसलिए केवल उस जानकारी का उत्पादन करता है।


1

मैं कस्टम हेडर का उपयोग नहीं करूंगा क्योंकि आप नहीं जानते कि क्या कोई प्रॉक्सी उन पर से गुजरेगी। URL आधारित रास्ता तय करना है।

प्राप्त / आदेश / देखें / ग्राहक / 23


1
मैं या तो कस्टम हेडर की सिफारिश नहीं करूंगा, लेकिन टूटी हुई समीपता इसका कारण नहीं है। प्रॉक्सी टूट गया है इसे ठीक किया जाना चाहिए।
जूलियन रेसके

1

निश्चित रूप से ठीक है:

GET /orders/view/client_id/23 or 
GET /orders/view/?client_id=23

यह भी ठीक है:

GET /orders/view/23 or 

मुझे लगता है कि यह ठीक होगा, भी:

POST /orders/view 
(custom HTTP header) CLIENT_ID: 23

REST-ful POST प्रतिक्रिया स्थान / शीर्षक के साथ HTTP 303 होनी चाहिए, जैसे "/ आदेश / दृश्य / 23"।
रिच रिमेर

0

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.