functions.https
kullanarak bir HTTP isteği aracılığıyla bir işlevi 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şlevin uç noktasına bir HTTP GET
isteği gönderdiğinizde tetiklenen örnek bir işlevi temel alır. Örnek işlev geçerli sunucu saatini alır, saati bir URL sorgu parametresinde belirtildiği şekilde biçimlendirir ve sonucu HTTP yanıtında gönderir.
Bir işlevi HTTP isteğiyle tetikleyin
HTTP olaylarını işleyen bir işlev oluşturmak için functions.https
kullanın. Bir HTTP işlevinin 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 argüman olarak kullanılan İstek nesnesi, istemci tarafından gönderilen HTTP isteğinin özelliklerine erişmenizi sağlar ve Response nesnesi, istemciye bir yanıt göndermenin bir yolunu sunar.
exports.date = functions.https.onRequest((req, res) => { // ... });
Mevcut Express uygulamalarını kullanma
App'ı onRequest()
için argüman olarak kullanarak, tam bir Express uygulamasını bir HTTP işlevine aktarabilirsiniz. Ortak kod, gösterildiği gibi ara yazılıma 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şlevini çağırma
Bir HTTP işlevini dağıttıktan sonra, onu kendi benzersiz URL'si aracılığıyla çağırabilirsiniz. URL sırasıyla aşağıdakileri içerir:
- İşlevinizi dağıttığınız bölge (veya bölgeler). Ağ gecikmesini en aza indirmek için bazı üretim işlevlerinin konumu açıkça ayarlaması gerekebilir.
- Firebase proje kimliğiniz
-
cloudfunctions.net
- İşlevinizin adı
Örneğin, date()
öğesini ç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önlendirmeyle 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>
HTTP işlevlerini bir güvenlik duvarı veya IP filtresinin arkasından ç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
Çerez 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, () => { // ... });
İstekteki değerleri oku
Aşağıdaki tabloda bazı yaygın senaryolar listelenmektedir:İçerik türü | Talep Gövdesi | Davranış |
---|---|---|
application/json | '{"name":"John"}' | request.body.name 'John'a eşittir |
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 'benim metnim'e eşittir |
application/x-www-form-urlencoded | 'isim=John' | request.body.name 'John'a eşittir |
Bu ayrıştırma aşağıdaki gövde ayrıştırıcıları tarafından yapılır:
- JSON gövde ayrıştırıcısı
- Ham gövde ayrıştırıcı
- Metin gövdesi ayrıştırıcısı
- URL kodlu form gövdesi 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"}'
daha sonra gönderilen veriler şu şekilde gerçekleştirilecektir:
Özellik/Yöntem | Değer |
---|---|
req.method | "POSTALAMAK" |
req.get('x-myheader') | "123" |
req.query.foo | "baz" |
req.body.text | "bir şey" |
req.rawBody | İsteğin ham (ayrıştırılmamış) baytları |
date()
işlevi örneğinde, işlev, kullanılacak tarih/saat biçimini ayarlamak için hem URL parametresini hem de gövdeyi bir format
değeri açısından 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 halde işleviniz çalışmaya devam edebilir ve sistem tarafından zorla sonlandırılabilir. Ayrıca bkz. Sync, Async ve Promises .
Node.js moment
modülünü kullanarak sunucu saatini alıp biçimlendirdikten sonra, date()
işlevi, sonucu HTTP yanıtında göndererek sonlanır:
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 yönlendirilebilir. Bu aynı zamanda kendi özel etki alanınızı bir HTTP işleviyle kullanmanıza da olanak tanır. Cloud Functions'ı Firebase Hosting'e bağlama hakkında daha fazla bilgi edinin.