Cloud Functions için https.onCall
tetikleyicisi,
bu biçimi kullanabilirsiniz. Bu bölümde,
istemci SDK'ları tarafından kullanılan HTTPS isteği ve yanıt biçimleri için spesifikasyon
API'yi uygulamaya dökelim. Koşullarınızı karşılıyorsanız bu bilgiler sizin için faydalı olabilir.
karşılanmaması Android, Apple platformları veya web SDK'ları kullanılarak karşılanamaz.
İstek biçimi: başlıklar
Çağrılanabilir bir tetikleyici uç noktasına yönelik HTTP isteği,POST
şu başlıkları ekleyin:
- Zorunlu:
Content-Type: application/json
- İsteğe bağlı
; charset=utf-8
öğesine izin verilir.
- İsteğe bağlı
- İsteğe bağlı:
Authorization: Bearer <token>
- İstekte bulunan giriş yapmış kullanıcının Firebase Authentication kullanıcı kimliği jetonu. Arka uç, bu jetonu otomatik olarak doğrular ve işleyicinin
context
öğesinde kullanılabilir hale getirir. Jeton geçerli değilse istek reddedilir.
- İstekte bulunan giriş yapmış kullanıcının Firebase Authentication kullanıcı kimliği jetonu. Arka uç, bu jetonu otomatik olarak doğrular ve işleyicinin
- İsteğe bağlı:
Firebase-Instance-ID-Token: <iid>
- Firebase istemci SDK'sından alınan FCM kayıt jetonu. Bu bir dize olmalıdır. Bu bilgi, işleyicinin
context
bölümünde yer alır. Push bildirimlerini hedeflemek için kullanılır.
- Firebase istemci SDK'sından alınan FCM kayıt jetonu. Bu bir dize olmalıdır. Bu bilgi, işleyicinin
- İsteğe bağlı:
X-Firebase-AppCheck: <token>
- İstemci uygulaması tarafından sağlanan Firebase Uygulama Kontrolü jetonu
isteği gönderin. Arka uç, bu jetonu otomatik olarak doğrular ve kodunu çözer.
appId
, işleyicinincontext
öğesine ekleniyor. Jeton kullanılamaz doğrulandığında istek reddedilir. (3.14.0 ve sonraki SDK sürümleri için kullanılabilir)
- İstemci uygulaması tarafından sağlanan Firebase Uygulama Kontrolü jetonu
isteği gönderin. Arka uç, bu jetonu otomatik olarak doğrular ve kodunu çözer.
Başka herhangi bir üstbilgi eklenirse, istek, aşağıdaki yanıt dokümanlarında açıklandığı gibi reddedilir.
Not: JavaScript istemcilerinde bu istekler, aşağıdaki nedenlerle bir CORS OPTIONS
ön kontrolünü tetikler:
application/json
politikasına izin verilmiyor.text/plain
veyaapplication/x-www-form-urlencoded
olmalıdır.Authorization
başlığı, CORS güvenli listeye alınmış bir istek başlığı değil.- Benzer şekilde, diğer başlıklara da izin verilmez.
Çağrılanabilir tetikleyici, bu OPTIONS
isteklerini otomatik olarak işler.
İstek içeriği
HTTP isteğinin gövdesi, aşağıdaki alanlardan herhangi birine sahip bir JSON nesnesi olmalıdır:
- Gerekli:
data
- İşleve aktarılan bağımsız değişken. Bu, geçerli herhangi bir JSON değeri olabilir. Bu kod, aşağıda açıklanan serileştirme biçimine göre otomatik olarak yerel JavaScript türlerine çözülür.
İstekte başka alanlar varsa arka uç, isteğin hatalı olduğunu kabul eder ve reddedilir.
Yanıt biçimi: durum kodları
Farklı HTTP durum kodlarına ve hatalar için dize durum kodları kullanıcı olabilir.
client
tetikleyicisi çağrılmadan önce bir HTTP hatası oluşursa yanıt, bir istemci işlevi olarak işlenmez. Örneğin, bir istemci var olmayan bir işlevi çağırmaya çalışırsa bir404 Not Found
yanıtı alır.İstemci tetikleyicisi çağrıldı ancak istek yanlış biçimdeyse (ör. JSON değilse, geçersiz alanlara sahipse veya
data
alanı eksikse) istekINVALID_ARGUMENT
hata kodu ile400 Bad Request
ile reddedilir.İstekte sağlanan kimlik doğrulama jetonu geçersizse istek,
UNAUTHENTICATED
hata kodu ile401 Unauthorized
ile reddedilir.İstekte sağlanan FCM kayıt jetonu geçersizse davranış tanımsızdır. Jeton, FCM ile push bildirimi göndermek için kullanıldığı durumlar haricinde her istekte kontrol edilmez.
Çağrılabilir tetikleyici çağrılır ancak işlenmemiş bir istisnayla başarısız olursa veya başarısız bir taahhüt döndürürse istek
INTERNAL
hata koduyla500 Internal Server Error
ile reddedilir. Bu sayede, kodlama hatalarının yanlışlıkla son kullanıcılara gösterilmesi önlenir.Çağrılabilir çağrılabilir ve çağrılabilir işlevler için sağlanan API'yi kullanarak açık bir hata koşulu döndürürse istek başarısız olur. Döndürülen HTTP durum kodu, code.proto bölümünde tanımlandığı gibi, hata durumunun HTTP durumuyla resmi olarak eşleştirilmesine dayanır. Döndürülen belirli hata kodu, mesaj ve ayrıntılar, aşağıda açıklandığı şekilde yanıt gövdesine kodlanır. Bu, işlev
OK
durumuyla ilgili açık bir hata döndürürse yanıtın200 OK
durumuna sahip olacağı ancak yanıttaerror
alanının ayarlandığı anlamına gelir.İstemci tetikleyicisi başarılı olursa yanıt durumu
200 OK
olur.
Yanıt biçimi: başlıklar
Yanıt aşağıdaki başlıklara sahiptir:
Content-Type: application/json
- İsteğe bağlı
; charset=utf-8
öğesine izin verilir.
Yanıt gövdesi
İstemci uç noktasından gelen yanıt her zaman JSON nesnesidir. En azından
result
veya error
ile birlikte isteğe bağlı alanları içerir. Öğe
yanıt JSON nesnesi değil veya data
ya da error
içermiyorsa
istemci SDK'sı isteği başarısız olarak değerlendirmelidir
Google hata kodu INTERNAL (13)
ile.
error
- Bu alan mevcutsa HTTP durum kodundan veyadata
değerinin de mevcut olup olmadığından bağımsız olarak isteğin başarısız olduğu kabul edilir. Bu alanın değeri;status
,message
ve (isteğe bağlı olarak)details
alanlarını içeren hatalar için standart Google Cloud HTTP Eşleme biçiminde bir JSON nesnesi olmalıdır.code
alanı dahil edilmemelidir.status
alanı ayarlanmazsa veya geçersiz bir değerse istemci, durumu code.proto'ya uygun olarakINTERNAL
olarak değerlendirmelidir.details
mevcutsa istemci SDK'sındaki hataya eklenen tüm kullanıcı bilgilerine (varsa) eklenir.
. Not: Buradakidetails
alanı kullanıcı tarafından sağlanan bir değerdir. Bu her zaman, GoogleStatus
biçimindeki proto türüne göre anahtarlanan değerlerin bir listesi değildir.result
: İşlev tarafından döndürülen değer. Bu, geçerli herhangi bir JSON değeri olabilir. firebase-functions SDK, kullanıcı tarafından döndürülen değeri otomatik olarak bu JSON biçiminde kodlar. İstemci SDK'ları, aşağıda açıklanan serileştirme biçimine göre bu parametrelerin kodunu otomatik olarak yerel türlere çözer.
Başka alanlar varsa bunlar yoksayılmalıdır.
Serileştirme
Rastgele veri yüklerinin serileştirme biçimi hem istek hem de yanıt için aynıdır.
Platform tutarlılığı için bunlar, standart JSON eşlemesi kullanılarak bir proto3 protokol arabelleğindeki bir Any
alanının değeriymiş gibi JSON'de kodlanır. null
, int
, double
veya string
gibi basit türlerin değerleri doğrudan kodlanır ve açık türlerini içermez. Bu nedenle, float
ve double
aynı şekilde kodlanır ve aramanın diğer ucunda hangisinin alındığını bilemeyebilirsiniz. JSON'a özgü olmayan türlerde, değer için yazılan proto3 kodlaması kullanılır. Daha fazla bilgi için Herhangi bir JSON kodlamasıyla ilgili dokümanlara bakın.
Aşağıdaki türlere izin verilir:
- boş -
null
- int (imzalı veya imzasız, en fazla 32 bit) - ör.
3
veya-30
. - kayan - ör.
3.14
. - çift - ör.
3.14
. - boole -
true
veyafalse
- dize - ör.
"hello world"
. - eşleme<string, any=""> - ör.
{"x": 3}
</string,> - liste
- ör. [1, 2, 3]
- uzun (imzalı veya imzasız, en fazla 64 bit) - [ayrıntılar için aşağıya bakın]
float
ve double
için NaN
ve Infinity
değerleri desteklenmiyor.
long
etiketinin normalde JSON'de izin verilmeyen özel bir tür olduğunu, ancak proto3 spesifikasyonunun kapsamında olduğunu unutmayın. Örneğin, bunlar şu şekilde kodlanır:
uzun
{
'@type': 'type.googleapis.com/google.protobuf.Int64Value',
'value': '-123456789123456'
}
imzasız uzun
{
'@type': 'type.googleapis.com/google.protobuf.UInt64Value',
'value': '123456789123456'
}
Genel olarak, @type
anahtarı ayrılmış olarak kabul edilmeli ve iletilen haritalar için kullanılmamalıdır.
Basit türler için tür belirtilmediğinden bazı değerler kablodan geçirildikten sonra tür olarak değişir. Geçilen bir float
, double
haline gelir. short
, int
haline gelir ve bu şekilde devam eder. Android'de liste değerleri için hem List
hem de JSONArray
desteklenir. Böyle durumlarda, bir JSONArray'in aktarılması List
sonucunu verir.
Bilinmeyen @type
alanı olan bir harita seri durumdan çıkarılırsa harita olarak bırakılır. Bu, geliştiricilerin eski müşterileri bozmadan dönüş değerlerine yeni türler içeren alanlar eklemesine olanak tanır.
Kod örnekleri
Bu bölümdeki örnekler, aşağıdakilerin nasıl kodlanacağını gösterir:
- Swift'teki bir callable.call örneği
- Arama için başarılı bir yanıt
- Arama için hata yanıtı
Kodlamak için Swift'teki Callable.call örneği
callable.call([
"aString": "some string",
"anInt": 57,
"aFloat": 1.23,
"aLong": -123456789123456 as Int64
])
İstek başlığı:
Method: POST
Content-Type: application/json; charset=utf-8
Authorization: Bearer some-auth-token
Firebase-Instance-ID-Token: some-iid-token
İstek içeriği:
{
"data": {
"aString": "some string",
"anInt": 57,
"aFloat": 1.23,
"aLong": {
"@type": "type.googleapis.com/google.protobuf.Int64Value",
"value": "-123456789123456"
}
}
}
Kodlama yanıtı
return {
"aString": "some string",
"anInt": 57,
"aFloat": 1.23
};
Başarılı yanıt başlığı:
200 OK
Content-Type: application/json; charset=utf-8
Başarılı yanıt gövdesi:
{
"response": {
"aString": "some string",
"anInt": 57,
"aFloat": 1.23
}
}
Kodlama yanıtı başarısız
throw new HttpsError("unauthenticated", "Request had invalid credentials.", {
"some-key": "some-value"
});
Başarısız yanıt başlığı:
401 UNAUTHENTICATED
Content-Type: application/json; charset=utf-8
Başarısız yanıt gövdesi:
{
"error": {
"message": "Request had invalid credentials.",
"status": "UNAUTHENTICATED",
"details": {
"some-key": "some-value"
}
}
}