2016-03-03 17 views
8

में वाइल्डकार्ड या कैच-ऑल पथ का उपयोग करना संभव है, मैं एक डोमेन के लिए सभी ट्रैफ़िक को रीडायरेक्ट करने का प्रयास कर रहा हूं। विशेष रूप से इस नौकरी के लिए सर्वर चलाने की बजाय मैं रीडायरेक्ट करने के लिए लैम्बडा के साथ एडब्ल्यूएस एपीआई गेटवे का उपयोग करने की कोशिश कर रहा था।क्या एडब्ल्यूएस एपीआई गेटवे

मेरे पास रूट पथ के लिए यह ठीक काम है "/" ​​लेकिन उप-पथों के लिए कोई अनुरोध उदा।/एक संभाल नहीं किया जाता है। क्या "सभी को पकड़ें" संसाधन या वाइल्डकार्ड पथ हैंडलर को परिभाषित करने का कोई तरीका है?

उत्तर

11

पिछले सप्ताह के रूप में, एपीआई गेटवे अब समर्थन करता है कि वे क्या "कैच-ऑल पथ चर" कहते हैं।

पूर्ण विवरण और माध्यम से गुजरने के यहाँ: API Gateway Update – New Features Simplify API Development

+0

यदि आप अभी भी इस जवाब की तलाश में हैं 2018, कृपया @ geekQ के उत्तर (https://stackoverflow.com/a/40608247/347777) को देखें, एक वास्तविक पकड़-सब (जो मैचों/ए/बी/सी/डी/...) अब संभव है। – Viccari

1

आप पथ परिवर्तनीय /{param} के साथ संसाधन बना सकते हैं, और आप इसे वाइल्डकार्ड पथ हैंडलर के रूप में देख सकते हैं।

धन्यवाद, - Ka Hou

+0

धन्यवाद, क्या आप जानते हैं कि क्या यह नेस्टेड रास्तों के साथ काम करेगा करते हैं? यानी अगर मैं/{param} का उपयोग करता हूं तो यह मेल खाता होगा/लेकिन मुझे यकीन नहीं है कि यह/a/b/c से मेल खाता है? चूंकि मैं सभी ट्रैफिक को रीडायरेक्ट करने का प्रयास कर रहा हूं, इसलिए मैं आदर्श रूप से/* या समकक्ष कहने में सक्षम होना चाहता हूं। –

+1

'/ {param} 'के लिए संसाधन परिभाषित करने से नेस्टेड पथ संभाल नहीं पाएंगे। ईजी। '/ something' मिलान होगा, लेकिन '/ कुछ/else' संसाधन'/{param}' –

+1

से मेल नहीं खाएगा यह सही है। एपीआई गेटवे वर्तमान में एकाधिक स्तर पथ का समर्थन नहीं करता है। –

8

अद्यतन: पिछले सप्ताह के रूप में, एपीआई गेटवे अब समर्थन करता है कि वे क्या कहते हैं "कैच-ऑल पथ चर"। API Gateway Update – New Features Simplify API Development देखें।


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

उदाहरण के लिए: method.request.path.XXXX

तो अगर आप सिर्फ /{param} आप के साथ है कि यहां पहुंच सकता था: method.request.path.param लेकिन यदि आप एक नेस्टेड पथ (स्लैश के साथ पैरामीटर) था, यह काम नहीं करेगा। आपको पूरे अनुरोध के लिए 404 भी मिलेंगे।

यदि method.request.path.param इसके बजाय एक सरणी थी ... तो नामित होने पर स्थिति के आधार पर पैरा प्राप्त हो सकता है। उदाहरण के लिए method.request.path.param[] ... नामित पैराम्स को वहां भी संभाला जा सकता है, लेकिन उन्हें एक्सेस करना वास्तव में आसान नहीं होगा। इसे किसी प्रकार का JSON पथ मैपिंग का उपयोग करने की आवश्यकता होगी (ऐसा लगता है कि आप अपने मैपिंग टेम्पलेट्स के साथ क्या कर सकते हैं)। अफसोस की बात यह नहीं है कि यह एपीआई गेटवे में कैसे संभाला जाता है।

मुझे लगता है कि यह ठीक है हालांकि यह एपीआई गेटवे को और भी जटिल कॉन्फ़िगर कर सकता है। हालांकि, यह एपीआई गेटवे को भी सीमित करता है और इस स्थिति को संभालने के लिए आप आखिरकार एक और भ्रमित कॉन्फ़िगरेशन के साथ समाप्त हो जाएंगे।

तो, आप यहां तक ​​कि लंबा सफर तय कर सकते हैं। एकाधिक संसाधनों के लिए एक ही विधि बनाएं और कुछ ऐसा करें: /{1}/{2}/{3}/{4}/{5}/{6}/{7} और इसी तरह। फिर यदि आवश्यक हो तो आप प्रत्येक पथ पैरामीटर स्तर को संभाल सकते हैं।

यदि पैरामीटर की संख्या हमेशा समान होती है, तो आप थोड़ा भाग्यशाली होते हैं और केवल संसाधनों का एक समूह स्थापित करने की आवश्यकता होती है, लेकिन अंत में एक विधि होती है।

स्रोत: https://forums.aws.amazon.com/thread.jspa?messageID=689700&#689700

+1

पिछले हफ्ते तक, एपीआई गेटवे अब "कैच-ऑल पाथ वैरिएबल" कहलाता है: https://aws.amazon.com/blogs/aws/api-gateway-update-new-features-simplify-api-development/ –

+1

अब आप 'किसी भी' अनुरोध और '/ {proxy +}' का उपयोग कर सकते हैं - केवल वाइल्डकार्ड पथ से कहीं अधिक है, लेकिन वाइल्डकार्ड HTTP विधि भी समर्थित है \ o/ – Tom

2

आप /{thepath+} की तरह पथ के साथ एक संसाधन बना सकते हैं। प्लस साइन महत्वपूर्ण है।

फिर अपने लैम्ब्डा समारोह में आप दोनों

  • event.path साथ मूल्य तक पहुँच सकते हैं - हमेशा पूरा पथ
  • या event.queryPathParameters.thepath शामिल हैं - भाग आप द्वारा परिभाषित होता है। अन्य संभावित उपयोग केस: /images/{imagepath+} जैसे संसाधन को परिभाषित करने के लिए केवल कुछ उपसर्ग के साथ पैच मिलान करें। चर में केवल उपपथ शामिल होगा।

आप सभी मूल्यों के साथ अपने कार्य करने के लिए पारित कर दिया डिबग कर सकते हैं: JSON.stringify(event)

Full documentation

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