HTTP isteği aracılığıyla bir işlevi tetiklemek için
functions.https
Bu komut,
desteklenen şu HTTP yöntemleri: GET
, POST
, PUT
, DELETE
ve
OPTIONS
.
Bu sayfadaki örnekler şuna dayalı olarak:
örnek işlevi
anahtar kelimeler içeren
İşlevler uç noktasına bir HTTP GET
isteği. Örnek işlevi
geçerli sunucu saatini alır, zamanı bir URL sorgusunda belirtilen şekilde biçimlendirir
parametresini kullanır ve sonucu HTTP yanıtında gönderir.
HTTP isteğiyle bir işlevi tetikleme
functions.https
kullanın
HTTP kodu işleyen bir fonksiyon oluşturmak için
etkinlikler. HTTP işlevinin etkinlik işleyicisi,
onRequest()
etkinlik,
tarafından yönetilen yönlendiricileri ve uygulamaları destekleyen
Ekspres web çerçevesine göz atın.
Express istek ve yanıt nesnelerini kullanma
onRequest()
için bağımsız değişken olarak kullanılır,
Request (İstek) nesnesi,
istemci tarafından gönderilen HTTP isteğinin özelliklerine ve
Yanıt nesnesi size
istemciye yanıt göndermesini sağlar.
exports.date = functions.https.onRequest((req, res) => { // ... });
Mevcut Express uygulamalarını kullanma
App'i bağımsız değişken olarak kullanmak
onRequest()
,
tam Express uygulamasını HTTP işlevine aktarmanızı sağlar. Ortak metin kodu taşınabilir
aşağıdaki gösterildiği gibi ara katman yazılımları için:
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);
HTTP işlevi çağırma
Bir HTTP işlevini dağıttıktan sonra bunu kendi benzersiz URL'yi tıklayın. URL sırasıyla aşağıdakileri içerir:
- İşlevinizi dağıttığınız bölge (veya bölgeler). Bazı üretimler işlevlerinin konum özelliğini açıkça ayarlaması gerekebilir. kullanarak ağ gecikmesini en aza indirin.
- Firebase proje kimliğiniz
cloudfunctions.net
- İşlevinizin adı
Örneğin, date()
öğesini çağıracak URL şöyle görünür:
https://us-central1-<project-id>.cloudfunctions.net/date
İşlevleri dağıtırken izin hatalarıyla karşılaşırsanız şunların sağlandığından emin olun: uygun IAM rollerini kullanıcıya atanır.
Express uygulama yönlendirmesiyle işlev adı, URL yollarına önek olarak eklenir potansiyel riskleri fark edersiniz. Örneğin, Express'teki alıcıyı çağıracak URL yukarıdaki uygulama örneği aşağıdaki gibi görünür:
https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
HTTP işlevlerini bir güvenlik duvarı veya IP filtresinin arkasında çağırırsanız araştırabilirsiniz. Google'ın HTTP işlevlerini sunmak için kullandığı IP adresleri.
Cloud Functions ile ara katman yazılımı modüllerini kullanma
Çerez desteği veya çerez desteği gibi şeyler için ara katman 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 şu blok:
// Enable CORS using the `cors` express middleware. cors(req, res, () => { // ... });
İstekten değerleri okuma
Aşağıdaki tabloda sık karşılaşılan bazı senaryolar listelenmiştir:İçerik Türü | İstek Metni | Davranış |
---|---|---|
application/json |
'{"name":"John"}' |
request.body.name eşittir "Can" |
application/octet-stream |
"benim metnim" | request.body eşittir "6d792074657874" (isteğin işlenmemiş baytları; Node.js Arabelleği dokümanlarına bakın.) |
text/plain |
"benim metnim" | request.body , "benim metnim"e eşit |
application/x-www-form-urlencoded |
'ad=Can' | request.body.name eşittir "Can" |
Bu ayrıştırma işlemi, aşağıdaki gövde ayrıştırıcıları tarafından gerçekleştirilir:
- JSON gövde ayrıştırıcısı
- Ham vücut ayrıştırıcı
- Metin gövdesi ayrıştırıcı
- URL kodlamalı form gövde ayrıştırıcısı
Fonksiyonunuzun 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"}'
gönderilen veriler şu altında gerçekleştirilecektir:
Özellik/Yöntem | Değer |
---|---|
req.method |
"YAYINLA" |
req.get('x-myheader') |
"123" |
req.query.foo |
"baz" |
req.body.text |
"bir şey" |
req.rawBody |
İsteğin ham (ayrılmamış) baytları |
date()
işlevi örneğinde işlev, hem URL parametresini hem de
kullanılacak tarih/saat biçimini ayarlamak için format
değerinin gövdesi:
let format = req.query.format; format = req.body.format;
HTTP İşlevlerini Sonlandırma
Bir HTTP işlevini her zaman send()
, redirect()
,
veya end()
. Aksi takdirde, fonksiyonunuz çalışmaya devam edebilir
tarafından zorla sonlandırıldı. Şu kaynakları da inceleyin
Senkronizasyon, Eşzamansız ve Vaatler.
Node.js kullanarak sunucu zamanını alıp biçimlendirdikten sonra
moment
modülü, date()
işlevi
HTTP yanıtında sonucu 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 Hizmetine Bağlama
Firebase Hosting ağına bir HTTP işlevi bağlayabilirsiniz. Şuradaki istekler: Firebase Hosting sitesinde belirli HTTP işlevlerine proxy uygulanabilir. Bu ayrıca ile kendi özel alanınızı HTTP işleviyle kullanabilirsiniz. Daha fazla bilgi: Cloud Functions, Firebase Hosting ağına bağlanıyor.