functions.https
kullanarak bir işlevi HTTP isteği üzerinden tetikleyebilirsiniz. Bu sayede, aşağıdaki desteklenen HTTP yöntemleri aracılığıyla senkron bir işlev çağırabilirsiniz: 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
HTTP etkinliklerini işleyen bir işlev oluşturmak için functions.https
öğesini kullanın. 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ılan Request nesnesi, istemci tarafından gönderilen HTTP isteğinin özelliklerine erişmenizi sağlar. Response nesnesi ise istemciye yanıt göndermenize olanak tanır.
exports.date = functions.https.onRequest((req, res) => { // ... });
Mevcut Express uygulamalarını kullanma
onRequest()
bağımsız değişkeni olarak Uygulama'yı kullanarak bir HTTP işlevine tam bir Express uygulaması aktarabilirsiniz. Ortak metin kodu, aşağıdaki gibi orta katmana 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);
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 Google'ın HTTP işlevlerini sunmak için kullandığı IP adreslerini arayabilirsiniz.
Cloud Functions ile orta katman modüllerini kullanma
Çerez desteği veya CORS gibi şeyler için orta katman 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 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 |
'my text' | request.body , "6d792074657874" değerine eşittir (isteğin ham baytları; Node.js Buffer dokümanlarına bakın) |
text/plain |
'my text' | request.body , "benim metnim"e eşit |
application/x-www-form-urlencoded |
'name=John' | request.body.name eşittir "Can" |
Bu ayrıştırma işlemi aşağıdaki gövde ayrıştırıcıları tarafından yapılır:
- JSON gövde ayrıştırıcısı
- Ham vücut ayrıştırıcı
- Metin gövdesi ayrıştırıcı
- URL'ye kodlanmış 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"}'
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 |
"something" |
req.rawBody |
İsteğin ham (ayrılmamış) baytları |
date()
işlev örneğinde işlev, kullanılacak tarih/saat biçimini ayarlamak için hem URL parametresini hem de gövdeyi format
değeri açısından test eder:
let format = req.query.format; format = req.body.format;
HTTP İşlevlerini Sonlandırma
HTTP işlevlerini her zaman send()
, redirect()
veya end()
ile bitirin. Aksi takdirde, işleviniz çalışmaya devam edebilir ve sistem tarafından zorla sonlandırılabilir. Senkronizasyon, Eşzamansız İşlemler ve Sözler başlıklı makaleyi de inceleyin.
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 işlevlerini Firebase Hosting'e bağlama
Firebase Hosting'e bir HTTP işlevi bağlayabilirsiniz. Firebase Hosting sitenizdeki istekler belirli HTTP işlevlerine proxy'lenebilir. 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.