5

के तहत दो सेवाएं यदि मेरे पास दो सेवाएं हैं, 'उपयोगकर्ता' और 'उत्पाद', प्रत्येक के लिए परिभाषित एंडपॉइंट्स के साथ कई कार्यों (प्रत्येक पारंपरिक एपीआई के रूप में), क्या उनके लिए यह संभव है कोड बेस (स्पष्टता के लिए) में अलग से व्यवस्थित किया जाए, लेकिन एक बार तैनात एक ही एपीआई बेस यूआरएल साझा किया जाए?सर्वर रहित फ्रेमवर्क - एक एपीआईजीडब्ल्यू एंडपॉइंट

/src 
-- /users 
---- event.json 
---- handler.js 
---- serverless.yml 
-- /products 
---- event.json 
---- handler.js 
---- serverless.yml 

और मेरे src/users/serverless.yml परिभाषित निम्नलिखित है:

functions: 
    create: 
    handler: handler.create 
    events: 
     - http: POST user 

    read: 
    handler: handler.read 
    events: 
     - http: GET user 

और मेरे src/products/serverless.yml मूल रूप से 'उत्पाद' के लिए एक ही बात है, बस स्वैप 'उपयोगकर्ता है उदाहरण के लिए, मैं निम्नलिखित संरचना है पर विचार ।

वर्तमान में, उन सेवाओं में से दोनों को अलग एपीआई अंतिमबिंदुओं, एक यूआरएल https://fghijklmnop.execute-api... के साथ एक और एक यूआरएल https://abcdevwxyz.execute-api....

मेरा प्रश्न है के साथ एक और, तैनात किया जाएगा यह इन सेवाओं तैनात किया है करने के लिए संभव हो जाएगा, लेकिन रहने के एक एकल यूआरएल के साथ एक एकल यूआरएल के तहत (तो दोनों यूआरएल https://abcdevwxyz.execute-api.... के तहत परोसा जाएगा)?

मुझे लगता है कि 'नहीं, क्योंकि क्लाउड फॉर्मेशन ...' का जवाब है, लेकिन मैंने सोचा कि मैं यहां चर्चा के लिए और सर्वर रहित अनुप्रयोगों के निर्माण की अपनी समझ में सहायता करने के लिए यहां प्रश्न पोस्ट करूंगा।

मुझे कस्टम डोमेन का उपयोग करने के बारे में पता है, the answer here के अनुसार, लेकिन एक त्वरित विकास चक्र के लिए यह वास्तव में एक आदर्श समाधान नहीं है।

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

उत्तर

0

मैं इस समस्या का अपने ही समाधान के साथ आया था। मैंने अपने आवेदन के एकीकरण बिंदु को सारणीबद्ध किया ताकि मेरे पास विशिष्ट एकीकरण सेवाएं (एपीआई, एस 3, एसएनएस, इत्यादि) हों जो घटनाओं का जवाब दे और फिर उन घटनाओं को संसाधित करें और उन्हें माइक्रोस्कोप को अलग करने के लिए प्रतिनिधि दें। मैंने कोड उदाहरणों के साथ article लिखा था।

1

आप एक serverless.yml

/src 
-- event.json 
-- users.handler.js 
-- products.handler.js 
-- serverless.yml 
+0

यह सच है, लेकिन फिर इन सेवाओं को कसकर जोड़ दिया गया है और हमेशा एक साथ तैनात और प्रबंधित किया जाना चाहिए। यदि आप सेवाओं को अलग-अलग अलग रखना चाहते हैं (लेकिन एपीआई परत के माध्यम से जुड़े हुए हैं) तो यह काम नहीं करता है। उदाहरण के लिए, सेवा का नाम वही होना चाहिए। –

1

मैं सीधे Serverless ढांचे समर्थन करने के लिए नहीं बोल सकता में कई कार्यों रख सकते हैं, लेकिन इस एपीआई गेटवे में निश्चित रूप से संभव है।

आप प्रत्येक "उप एपीआई" के लिए एकाधिक स्वैगर फाइलों को बनाए रख सकते हैं, और एक ही एपीआई में दोनों परिभाषाओं को आयात करने के लिए आयात? मोड = विलय का उपयोग कर सकते हैं।

देखें http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api.html

धन्यवाद, रयान

0

आप कस्टम डोमेन नाम का उपयोग कर सकते हैं: http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html

सेटअप कस्टम डोमेन नाम (यदि आप एक SSL प्रमाणपत्र की आवश्यकता होगी) http://myapi.com/

फिर अपने एपिस को मानचित्र करें:

http://myapi.com/users 
http://myapi.com/products 

बस इस तरह अपने कार्यों फोन:

http://myapi.com/users/create 
http://myapi.com/users/read 
http://myapi.com/products/whaterver 
+0

मेरे प्रश्न के अनुसार, मैं वास्तव में इसके विकल्पों की तलाश में हूं क्योंकि यह चिकनी विकास के लिए उपयुक्त नहीं है। मैं अभी किसी भी डोमेन को पंजीकृत करने के लिए तैयार नहीं हूं। –

1

क्या मैं अपने खुद के कोड के साथ किया है handler.js फाइलों से बाहर सभी कोड खींच और इसके अंदर मॉड्यूल डाल करने के लिए है।इन मॉड्यूल को हैंडलर.जेएस फाइलों में जरूरी होगा और फिर एक साधारण समारोह कहा जाएगा।

usersModule.js:

export const doSomething =() => { 
    // Do something here. 
}; 

उपयोगकर्ताओं/handler.js:

import {doSomething} from '../.../usersModule.js'; 

export const handler = (event, context, callback) => { 
    doSomething(); 
    // Do other stuff... 
    callback(null, "Success"); 
}; 

इस तरह, आप अपने कोड का मांस जगह भी आप यह करना चाहते हैं कर सकते हैं, जो कुछ भी में आयोजित रास्ता आपको समझ में आता है।

हालांकि, आप अभी भी एक भी एपीआई परिभाषित किया गया है करने के लिए होगा। या API को मर्ज करने के लिए RyanG-AWS से उत्तर का उपयोग करें।


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

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