[amazon-web-services] अमेज़ॅन एपीआई गेटवे से एडब्ल्यूएस लैम्ब्डा को एक क्वेरीस्ट्रिंग या रूट पैरामीटर कैसे पास करें



Answers

यह काम करने के लिए कदम हैं:

एपीआई गेटवे कंसोल के भीतर ...

  1. Resources -> Integration Request
  2. टेम्पलेट्स ड्रॉपडाउन के बगल में प्लस या एडिट आइकन पर क्लिक करें (विषम मुझे पता है कि टेम्पलेट फ़ील्ड पहले से ही खुला है और यहां बटन गहरा हुआ दिखता है)
  3. स्पष्ट रूप से सामग्री-प्रकार फ़ील्ड में application/json टाइप करें, भले ही यह एक डिफ़ॉल्ट दिखाता है (यदि आप ऐसा नहीं करते हैं तो यह सहेज नहीं पाएगा और आपको एक त्रुटि संदेश नहीं देगा)
  4. इनपुट मैपिंग { "name": "$input.params('name')" } में डाल दें

  5. टेम्पलेट्स ड्रॉपडाउन के बगल में स्थित चेक बॉक्स पर क्लिक करें (मुझे लगता है कि यह आखिरकार इसे बचाता है)

Question

उदाहरण के लिए यदि हम उपयोग करना चाहते हैं

GET /user?name=bob

या

GET /user/bob

आप इन दोनों उदाहरणों को लैम्ब्डा फ़ंक्शन के पैरामीटर के रूप में कैसे पारित करेंगे?

मैंने प्रलेखन में "मैप किए गए" को सेट करने के बारे में कुछ देखा, लेकिन मुझे एपीआई गेटवे कंसोल में यह सेटिंग नहीं मिल रही है।

  • विधि अनुरोध पृष्ठ में परिभाषित parameter-name नामक पथ पैरामीटर के लिए method.request.path.parameter-name
  • विधि अनुरोध पृष्ठ में परिभाषित parameter-name नामक क्वेरी स्ट्रिंग पैरामीटर के लिए method.request.querystring.parameter-name

मुझे इन विकल्पों में से कोई भी दिखाई नहीं देता है, भले ही मैंने एक क्वेरी स्ट्रिंग परिभाषित की हो।




यदि आप अपने लैम्ब्डा कार्यों के लिए जावा का उपयोग कर रहे हैं तो आप लैम्बडा फ्रेमवर्क का उपयोग कर सकते हैं जो आपके लिए इस सामान का ख्याल रखता है।




प्राप्त करें / उपयोगकर्ता? नाम = बॉब

{
    "name": "$input.params().querystring.get('name')"
}

प्राप्त करें / उपयोगकर्ता / बॉब

{
    "name": "$input.params('name')"
}



अब आप मैम्प्लिंग कॉन्फ़िगर करने के बजाय, स्वचालित आकार में पूर्ण अनुरोध प्राप्त करने के लिए लैम्ब्डा के लिए नए प्रॉक्सी एकीकरण प्रकार का उपयोग करने में सक्षम होना चाहिए।

देखें: http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-set-up-lambda-proxy-integration-on-proxy-resource




अपने लैम्ब्डा फ़ंक्शन में पैरामीटर पास करने के लिए आपको एपीआई गेटवे अनुरोध और आपके लैम्ब्डा फ़ंक्शन के बीच मैपिंग बनाने की आवश्यकता है। मैपिंग Integration Request -> चयनित एपीआई गेटवे संसाधन के Mapping templates अनुभाग में किया जाता है।

प्रकार application/json का मैपिंग बनाएं, फिर दाईं ओर आप टेम्पलेट संपादित करें (पेंसिल पर क्लिक करें)।

एक मैपिंग टेम्पलेट वास्तव में एक वेग टेम्पलेट है जहां आप ifs, loops और निश्चित रूप से प्रिंट चर का उपयोग कर सकते हैं। टेम्पलेट में docs.aws.amazon.com/apigateway/latest/developerguide/… जहां आप क्वेरीस्ट्रिंग पैरामीटर, अनुरोध हेडर इत्यादि को व्यक्तिगत रूप से एक्सेस कर सकते हैं। निम्नलिखित कोड के साथ आप संपूर्ण क्वेरीस्ट्रिंग को फिर से बना सकते हैं:

{
    "querystring" : "#foreach($key in $input.params().querystring.keySet())#if($foreach.index > 0)&#end$util.urlEncode($key)=$util.urlEncode($input.params().querystring.get($key))#end",
    "body" : $input.json('$')
}

नोट: टेम्पलेट को सहेजने के लिए चेक प्रतीक पर क्लिक करें। आप अपने संसाधनों में "परीक्षण" बटन के साथ अपने परिवर्तनों का परीक्षण कर सकते हैं। लेकिन एडब्ल्यूएस कंसोल में क्वेरीस्ट्रिंग पैरामीटर का परीक्षण करने के लिए आपको अपने संसाधन के Method Request खंड में पैरामीटर नामों को परिभाषित करने की आवश्यकता होगी।

नोट: Velocity templating भाषा के बारे में अधिक जानकारी के लिए वेग उपयोगकर्ता मार्गदर्शिका की जांच करें।

फिर अपने लैम्ब्डा टेम्पलेट में आप क्वेरीस्ट्रिंग पार्स प्राप्त करने के लिए निम्न कार्य कर सकते हैं:

var query = require('querystring').parse(event.querystring)
// access parameters with query['foo'] or query.foo



निम्न पैरामीटर-मैपिंग उदाहरण पथ, क्वेरीस्ट्रिंग और हेडर समेत सभी मानकों को पास करता है, एक JSON पेलोड के माध्यम से एकीकरण समापन बिंदु के माध्यम से

#set($allParams = $input.params())
{
  "params" : {
    #foreach($type in $allParams.keySet())
    #set($params = $allParams.get($type))
    "$type" : {
      #foreach($paramName in $params.keySet())
      "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
      #if($foreach.hasNext),#end
      #end
    }
    #if($foreach.hasNext),#end
    #end
  }
}

असल में, यह मैपिंग टेम्पलेट पेलोड में सभी अनुरोध पैरामीटर को निम्नानुसार उल्लिखित करता है:

{
  "parameters" : {
     "path" : {    
       "path_name" : "path_value", 
       ...
     }
     "header" : {  
       "header_name" : "header_value",
       ...
     }
     'querystring" : {
       "querystring_name" : "querystring_value",
       ...
     }
   }
}

अमेज़ॅन एपीआई गेटवे डेवलपर गाइड से कॉपी किया गया




इन दिनों एडब्ल्यूएस पर एपीआई गेटवे कंसोल में एक ड्रॉप-डाउन टेम्पलेट शामिल है।

अपने एपीआई के लिए, संसाधन नाम पर क्लिक करें ... फिर प्राप्त करें

विस्तृत करें "बॉडी मैपिंग टेम्पलेट्स"

में टाइप करें

आवेदन / json

सामग्री-प्रकार के लिए (स्पष्ट रूप से टाइप किया जाना चाहिए) और टिक पर क्लिक करें

"टेम्पलेट जेनरेट करें" और एक ड्रॉपडाउन (छवि देखें) शब्द के साथ एक नई विंडो खुल जाएगी।

चुनते हैं

विधि अनुरोध पासथ्रू

फिर सहेजें पर क्लिक करें

किसी भी चर का उपयोग करने के लिए, बस निम्न वाक्यविन्यास का उपयोग करें (यह पायथन है) उदाहरण के लिए यूआरएल:

https://yourURL.execute-api.us-west-2.amazonaws.com/prod/confirmReg?token=12345&uid=5

आप निम्नानुसार चर प्राप्त कर सकते हैं:

from __future__ import print_function

import boto3
import json

print('Loading function')


def lambda_handler(event, context):
    print(event['params']['querystring']['token'])
    print(event['params']['querystring']['uid'])

इसलिए आपकी इच्छानुसार प्रत्येक वैरिएबल को स्पष्ट रूप से नाम या मानचित्र करने की आवश्यकता नहीं है।




Related