5

İki hizmetim varsa, her biri için her biri için tanımlanmış uç noktalara sahip çeşitli işlevlere sahip olan 'Kullanıcılar' ve 'Ürünler', bunları yapabilmeleri mümkündür. Bir kod tabanında (açıklık için) ayrı olarak organize edilmeli, ancak bir kez dağıtıldığında aynı API temel URL'sini paylaşır mısınız?Sunucusuz Çerçeve - Bir APIGW bitiş noktası altında iki hizmet

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

ve benim src/users/serverless.yml tanımlanan aşağıdaki vardır:

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

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

ve benim src/products/serverless.yml 'ürünlere' için temelde aynı şey, sadece takas 'kullanıcı' vardır Örneğin, ben şu yapıya sahip düşünün .

Halen bu hizmetlerin her ikisi de bu hizmetler konuşlandırılacak olması mümkün olacağını belirgin bir şekilde farklıdır API uç noktaları bir URL'ye https://fghijklmnop.execute-api... ile diğeri https://abcdevwxyz.execute-api....

Benim sorum bir URL ile başka, dağıtılabilir ancak kalır edilecek Tek bir URL ile tek bir URL altında (bu nedenle her ikisi de https://abcdevwxyz.execute-api.... URL'si altında sunulur)?

Cevabın "Hayır, çünkü Bulut Oluşumu ..." olduğunu varsayardım, ama burada tartışmayı basitçe tartışma uğruna yayınlayacağımı ve bina sunucusuz uygulamalar konusunda kendi anlayışımıma yardımcı olabileceğimi düşündüm.

the answer here uyarınca Özel Etki Alanları'nı kullanmanın farkındayım, ancak daha hızlı bir geliştirme döngüsü için bu gerçekten ideal bir çözüm değildir.

Şimdiye kadar yaptığım tek çözüm, API'mn ihtiyaç duyacağı tüm uç noktaları içerecek olan ve yalnızca daha önce yapılandırılmış uç noktalardan ziyade doğrudan Lambda işlevlerini doğrudan çağırması gereken "api" adlı bir hizmet oluşturmak olacaktır. Gerçekten bir soyutlama katmanı olurdu, ancak benim uygulama için potansiyel olarak gereksiz katmanları ekleyin. Yine, toplumun bu konuda ne hissettiğini görmek merak ediyorum.

cevap

0

Bu soruna kendi çözümümden geldim. Uygulamamın entegrasyon noktalarını, olaylara yanıt veren ve ardından bu olayları işleyen ve bunları ayrı mikro hizmetlere aktaracak özel Entegrasyon hizmetlerine (API, S3, SNS, vb.) Sahip olmak için tasarladım. Kod örnekleri ile bir article yazdım.

1

tek bir serverless.yml

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

Bu doğrudur, ancak bu hizmetler sıkı bir şekilde birleştirilir ve her zaman birlikte dağıtılmalı ve birlikte yönetilmelidir. Hizmetlerin ayrı bir şekilde ayrı tutulmasını istiyorsanız (ancak bir API katmanı yoluyla bağlanmışsa), bu işe yaramıyor. Servis adı aynı olmalıdır, örneğin. –

0
yılında Özel Alan Adları kullanabilirsiniz

: http://myapi.com/

(bir SSL sertifikası gerekir) http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html

kurulum özel alanlar adı o zaman apis'i eşleştirin:

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

Sadece bu gibi işlevleri çağırmak: Kendi koduyla yaptık ne

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

Soruma göre, pürüzsüz gelişim için uygun olmadığı için gerçekten alternatifler arıyorum. Şu anda herhangi bir etki alanı kaydetmeye hazır değilim. –

1

handler.js dosyalarını tüm kod çekin ve ona iç modülleri koymaktır.Bu modüller handler.js dosyalarında gerekli olacak ve daha sonra basit bir işlev çağrılacaktır.

usersModule.js:

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

kullanıcılar/handler.js: bunu istiyorum yerde

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

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

Bu şekilde, sizin kod eti yerleştirebilir, her ne organize yolu sana mantıklı geliyor.

Yine de, tanımlı tek bir API'ye sahip olmanız gerekir. Ya da API'leri birleştirmek için RyanG-AWS'den gelen cevabı kullanın. Kod ve API tanımlarını ayrı tutmak isterseniz yine de kullanıcı API'sini ve ürün API'sini ayrı ayrı oluşturabilirsiniz. Daha sonra, bu API'lardan birini arayacak başka birleştirilmiş bir API'ye sahip olursunuz. Bu şekilde, arayacağınız tek bir temel URL ile tek bir hizmetiniz olur. Bunu, tümleştirme türü HTTP ile yapabilirsiniz. Bunu denemedim, o yüzden ne kadar işe yarayacağını bilmiyorum.