Google, Siyah topluluklar için ırksal eşitliği ilerletmeye kararlıdır. Nasıl olduğunu gör.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

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

Sen kullanarak bir HTTP isteği üzerinden bir işlev tetikleyebilir functions.https . Bu, desteklenen aşağıdaki HTTP yöntemlerini kullanarak senkronize bir işlevi çağırmanıza izin verir: GET , POST , PUT , DELETE ve OPTIONS .

Bu sayfadaki örnekler, işlevlerin 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 gibi biçimlendirir ve sonucu HTTP yanıtında gönderir.

HTTP isteği ile bir işlevi tetikleme

Kullanım functions.https bir işlevi olduğunu kolları, HTTP olaylar yaratmak. HTTP işlevinin olay işleyicisi, Express web çerçevesi tarafından yönetilen yönlendiricileri ve uygulamaları destekleyen onRequest() olayını dinler.

Hızlı 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 ve Response nesnesi, istemciye geri yanıt göndermeniz için bir yol sağlar.

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

Mevcut Express uygulamalarını kullanma

Uygulamayı onRequest() için bağımsız değişken olarak kullanarak, tam bir Express uygulamasını bir HTTP işlevine geçirebilirsiniz. Isıcam kodu 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);
 

HTTP işlevini çağır

Bir HTTP işlevini dağıttıktan sonra, işlevi 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). Bazı üretim işlevlerinin ağ gecikmesini en aza indirmek için konumu açıkça ayarlaması gerekebilir.
  • Firebase proje kimliğiniz
  • cloudfunctions.net
  • İşlevin adı

Örneğin, date() yöntemini ç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.

Express uygulama yönlendirmesiyle, 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ğırmak için URL şuna benzer:

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

Eğer HTTP çağırmak bir güvenlik duvarı veya IP filtresi arkasında fonksiyonları yapabilirsiniz bakmak Google HTTP işleve hizmet için kullandığı IP adreslerini.

Bulut İşlevlerine sahip ara katman modülleri kullanma

Çerez desteği veya CORS gibi şeyler için ara katman yazılımı bağımlılıkları enjekte etmeniz 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.
return cors(req, res, () => {
  // ...
});

İstekten değerleri okuma

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 'metnim' request.body '6d792074657874' değerine eşittir (isteğin ham baytı; Node.js Buffer belgelerine bakın )
text/plain 'metnim' request.body 'metnime' eşittir
application/x-www-form-urlencoded 'Name = John' request.body.name 'John'a eşittir

Bu ayrıştırma aşağıdaki vücut 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"}'

gönderilen veriler aşağıdaki şekilde gerçekleşir:

Ö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 (ayrıştırılmamış) baytı

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

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

HTTP İşlevlerini Sonlandırma

HTTP işlevini her zaman send() , redirect() veya end() . Aksi takdirde, işleviniz çalışmaya devam edebilir ve sistem tarafından zorla sonlandırılabilir. Ayrıca bkz. Senkronizasyon, Zaman uyumsuzluk ve Vaatler .

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);
console.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 Hosting sitenizdeki istekler, belirli HTTP işlevlerine yakın olabilir. Bu aynı zamanda bir HTTP işleviyle kendi özel etki alanınızı kullanmanızı sağlar. Bulut İşlevlerini Firebase Hosting'e bağlama hakkında daha fazla bilgi edinin.