HTTP istekleri aracılığıyla çağrı işlevleri

Functions.https kullanarak bir HTTP isteği aracılığıyla bir functions.https tetikleyebilirsiniz. Bu, aşağıdaki desteklenen HTTP yöntemleri aracılığıyla eşzamanlı bir işlevi çağırmanıza olanak tanır: GET , POST , PUT , DELETE ve OPTIONS .

Bu sayfadaki örnekler, işlev uç noktasına bir HTTP GET isteği gönderdiğinizde tetiklenen örnek bir işleve dayanmaktadır. Örnek işlev, geçerli sunucu saatini alır, saati bir URL sorgu parametresinde belirtildiği gibi biçimlendirir ve sonucu HTTP yanıtında gönderir.

HTTP isteğiyle bir işlevi tetikleyin

HTTP olaylarını işleyen bir functions.https oluşturmak için functions.https'yi kullanın. Bir HTTP işlevi için olay işleyicisi, Express web çerçevesi tarafından yönetilen yönlendiricileri ve uygulamaları destekleyen onRequest() olayını dinler.

Ekspres istek ve yanıt nesnelerini kullanma

onRequest() için bağımsız değişkenler olarak kullanılan Request nesnesi, istemci tarafından gönderilen HTTP isteğinin özelliklerine erişmenizi sağlar ve Response nesnesi, istemciye bir yanıt göndermeniz için bir yol sağlar.

exports.date = functions.https.onRequest((req, res) => {
  // ...
});

Mevcut Express uygulamalarını kullanma

onRequest() için bağımsız değişken olarak App kullanarak, tam bir Express uygulamasını bir HTTP işlevine iletebilirsiniz. Standart kod, gösterildiği gibi ara katman yazılımına taşınabilir:

const express = require('express');
const cors = require('cors');

const app = express();

// Automatically allow cross-origin requests
app.use(cors({ origin: true }));

// Add middleware to authenticate requests
app.use(myMiddleware);

// build multiple CRUD interfaces:
app.get('/:id', (req, res) => res.send(Widgets.getById(req.params.id)));
app.post('/', (req, res) => res.send(Widgets.create()));
app.put('/:id', (req, res) => res.send(Widgets.update(req.params.id, req.body)));
app.delete('/:id', (req, res) => res.send(Widgets.delete(req.params.id)));
app.get('/', (req, res) => res.send(Widgets.list()));

// Expose Express API as a single Cloud Function:
exports.widgets = functions.https.onRequest(app);

Bir HTTP işlevi çağırın

Bir HTTP işlevini dağıttıktan sonra, onu kendi benzersiz URL'si aracılığıyla çağırabilirsiniz. URL, sırayla aşağıdakileri içerir:

  • İşlevinizi dağıttığınız bölge (veya bölgeler). Bazı üretim işlevlerinin, ağ gecikmesini en aza indirmek için konumu açıkça ayarlaması gerekebilir.
  • Firebase proje kimliğiniz
  • cloudfunctions.net
  • İşlevinizin adı

Örneğin, date() işlevini çağıracak URL şuna benzer:

https://us-central1-<project-id>.cloudfunctions.net/date

İşlevleri dağıtırken izin hatalarıyla karşılaşırsanız, dağıtım komutlarını çalıştıran kullanıcıya uygun IAM rollerinin atandığından emin olun.

Ekspres uygulama yönlendirme ile işlev adı, tanımladığınız uygulamadaki URL yollarına önek olarak eklenir. Örneğin, yukarıdaki Express uygulaması örneğinde alıcıyı çağıracak URL şuna benzer:

https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>

Bir güvenlik duvarı veya IP filtresinin arkasında HTTP işlevlerini çağırırsanız, Google'ın HTTP işlevlerini sunmak için kullandığı IP adreslerini arayabilirsiniz.

Cloud Functions ile ara yazılım modüllerini kullanın

Tanımlama bilgisi desteği veya CORS gibi şeyler için ara yazılım bağımlılıkları eklemeniz gerekiyorsa, bunları işlev içinde çağırın. Örneğin, CORS desteğini etkinleştirmek için aşağıdaki bloğu ekleyin:

// Enable CORS using the `cors` express middleware.
cors(req, res, () => {
  // ...
});

İstekten değerleri oku

Aşağıdaki tabloda bazı yaygın senaryolar listelenmektedir:

İçerik türü İstek Gövdesi Davranış
application/json '{"name":"John"}' request.body.name eşittir 'John'
application/octet-stream 'benim metnim' request.body '6d792074657874'e eşittir (isteğin ham baytları; Node.js Buffer belgelerine bakın)
text/plain 'benim metnim' request.body 'metnim'e eşittir
application/x-www-form-urlencoded 'isim = John' request.body.name eşittir 'John'

Bu ayrıştırma aşağıdaki gövde ayrıştırıcıları tarafından yapılır:

İşlevinizin aşağıdaki istekle çağrıldığını varsayalım:

curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'

daha sonra gönderilen veriler aşağıdakiler altında gerçekleştirilecektir:

Özellik/Yöntem Değer
req.method "İLETİ"
req.get('x-myheader') "123"
req.query.foo "baz"
req.body.text "bir şey"
req.rawBody İsteğin ham (çözülmemiş) baytları

date() işlevi örneğinde, işlev, kullanılacak tarih/saat biçimini ayarlamak için bir format değeri için hem URL parametresini hem de gövdeyi test eder:

let format = req.query.format;
format = req.body.format;

HTTP İşlevlerini Sonlandır

Bir HTTP işlevini her zaman send() , redirect() veya end() ile sonlandırın. Aksi takdirde işleviniz çalışmaya devam edebilir ve sistem tarafından zorla sonlandırılabilir. Ayrıca Sync, Async ve Promises bölümüne bakın.

Node.js moment modülünü kullanarak sunucu saatini alıp biçimlendirdikten sonra, date() işlevi sonucu HTTP yanıtında göndererek sona erer:

const formattedDate = moment().format(`${format}`);
functions.logger.log('Sending Formatted date:', formattedDate);
res.status(200).send(formattedDate);

HTTP İşlevlerini Firebase Hosting'e Bağlama

Firebase Hosting'e bir HTTP işlevi bağlayabilirsiniz. Firebase Barındırma sitenizdeki istekler, belirli HTTP işlevlerine proxy olarak gönderilebilir. Bu aynı zamanda bir HTTP işleviyle kendi özel etki alanınızı kullanmanıza da olanak tanır. Cloud Functions'ı Firebase Hosting'e bağlama hakkında daha fazla bilgi edinin.