Bir HTTP tetikleyicisi, işlev URL'si olarak adlandırılan bir HTTP(S) uç noktası aracılığıyla bir işlevi erişime açar. Bir istemci işlev URL'sini çağırdığında Function Compute, HTTP isteğini bir olay nesnesine dönüştürür ve bunu işlev işleyicinize iletir. İşlev yanıt döndürdükten sonra Function Compute, çıktıyı tekrar bir HTTP yanıtına eşler ve istemciye gönderir.
Bu konu, yerleşik çalışma zamanlarında HTTP tetikleyicisinin davranışını ele alır. Özel çalışma zamanları için bkz. Web işlevleri.
Function Compute 3.0'da yerleşik çalışma zamanlarının HTTP tetikleyici davranışı, Function Compute 2.0'dan önemli ölçüde farklıdır. Ayrıntılar için bkz. Nasıl çalışır . Özel çalışma zamanları ve Özel Konteyner çalışma zamanları için davranış Function Compute 2.0 ile aynı kalır.
Nasıl çalışır
Bir istemci işlev URL'sini çağırdığında:
Function Compute, HTTP isteğini bir olay nesnesine (
event) eşler.Olay nesnesi işlev işleyicinize iletilir.
İşleviniz yanıt döndürdükten sonra Function Compute, çıktıyı bir HTTP yanıtına eşler ve istemciye geri gönderir.
İstek yapısı
Biçim
Function Compute gelen HTTP isteğini aşağıdaki yapıya sahip bir olay nesnesine eşler:
{
"version": "v1",
"rawPath": "/example",
"body": "Hello FC!",
"isBase64Encoded": false,
"headers": {
"header1": "value1",
"header2": "value1,value2"
},
"queryParameters": {
"parameter1": "value1",
"parameter2": "value1,value2"
},
"requestContext": {
"accountId": "123456*********",
"domainName": "<http-trigger-id>.<region-id>.fcapp.run",
"domainPrefix": "<http-trigger-id>",
"http": {
"method": "GET",
"path": "/example",
"protocol": "HTTP/1.1",
"sourceIp": "11.11.11.**",
"userAgent": "PostmanRuntime/7.32.3"
},
"requestId": "1-64f6cd87-*************",
"time": "2023-09-05T06:41:11Z",
"timeEpoch": "1693896071895"
}
}
Parametreler
| Parametre | Açıklama | Örnek |
|---|---|---|
version |
Yük biçimi sürümü. Desteklenen tek değer v1 değeridir. |
v1 |
rawPath |
URL kodlamalı istek yolu. https://{url-id}.{region}.fcapp.run/example gibi bir istek URL'si için bu değer /example olur. Kodu çözülmüş yol için bkz. requestContext.http.path. |
/example |
body |
İstek gövdesi. İkili veriler Base64 ile kodlanır. | Hello FC! |
isBase64Encoded |
İstek gövdesinin Base64 ile kodlanıp kodlanmadığını belirtir. Geçerli değerler: true, false. |
false |
headers |
Anahtar-değer çiftleri olarak istek üst bilgileri. Bir anahtar birden fazla değere sahipse değerler virgülle ayrılır. Function Compute 3.0'da her üst bilgi anahtarının ilk harfi büyük harfe dönüştürülür (normalleştirme). Bkz. Bir işlevi çağırmak için HTTP tetikleyicisi kullandığımda üst bilgi anahtarının ilk harfi neden büyük harf olur? | {"Header1": "value1", "Header2": "value1,value2"} |
queryParameters |
JSON nesnesi olarak sorgu parametreleri. https://{url-id}.{region}.fcapp.run/example?key1=value1 gibi bir URL için bu değer {"key1": "value1"} olur. Aynı anahtar için birden fazla değer virgülle ayrılır. |
{"parameter1": "value1", "parameter2": "value1,value2"} |
requestContext |
İstek kimliği, zaman damgası ve arayan bilgileri dahil olmak üzere ek istek meta verileri. | — |
requestContext.accountId |
İşleve sahip olan Alibaba Cloud hesabının kimliği. | 123456********* |
requestContext.domainName |
HTTP tetikleyicisinin alan adı. | <http-trigger-id>.<region-id>.fcapp.run |
requestContext.domainPrefix |
HTTP tetikleyicisinin alan adı ön eki. | <http-trigger-id> |
requestContext.http |
HTTP isteğiyle ilgili ayrıntılı bilgiler. | — |
requestContext.http.method |
HTTP yöntemi. Geçerli değerler: GET, POST, PUT, HEAD, OPTIONS, PATCH, DELETE. |
GET |
requestContext.http.path |
Kodu çözülmüş istek yolu. https://{url-id}.{region}.fcapp.run/example?name=Jane gibi bir istek URL'si için bu değer /example olur. |
/example |
requestContext.http.protocol |
İstek protokolü. | HTTP/1.1 |
requestContext.http.sourceIp |
Doğrudan TCP bağlantısının eş IP'si (RemoteAddr). Aşağıdaki notu inceleyin. | 11.11.XX.XX |
requestContext.http.userAgent |
user-agent istek üst bilgisinin değeri. |
PostmanRuntime/7.32.3 |
requestContext.requestId |
Çağrı günlüklerinin izlenmesi için istek kimliği. | 1-64f6cd87-************* |
requestContext.time |
ISO 8601 biçimindeki istek zaman damgası. | 2023-09-05T06:41:11Z |
requestContext.timeEpoch |
UNIX zamanındaki (milisaniye cinsinden) istek zaman damgası. | 1693896071895 |
sourceIp doğrudan TCP bağlantısının eş IP'sidir ve mutlaka orijinal istemci IP'si değildir. İstek bir proxy tarafından yönlendirilmezse sourceIp istemcinin IP'sidir. İstek bir veya daha fazla proxy üzerinden geçerse sourceIp son proxy'nin IP'sidir. İstekler proxy'lerden geçtiğinde orijinal istemci IP'sini almak için X-Forwarded-For üst bilgisini okuyun. Ayrıntılar için bkz. HTTP tetikleyicisi yerleşik bir çalışma zamanı kullanan bir işlevi çağırdığında istemcinin orijinal IP adresini nasıl elde ederim?
Eşleme mantığı
Function Compute HTTP isteğini olay nesnesine şu şekilde eşler:
HTTP istek üst bilgileri →
event.headersHTTP sorgu parametreleri →
event.queryParametersİstek bağlamı (istek kimliği, zaman damgası, arayan kimliği) →
event.requestContextPOST istek gövdesi →
event.body
Base64 kodlama
Function Compute, istek gövdesinin Base64 ile kodlanıp kodlanmayacağını belirlemek için Content-Type üst bilgisini denetler.
**Content-Type** |
**isBase64Encoded** |
Gövde işleme |
|---|---|---|
text/* |
false |
Olduğu gibi iletilir |
application/json |
false |
Olduğu gibi iletilir |
application/ld+json |
false |
Olduğu gibi iletilir |
application/xhtml+xml |
false |
Olduğu gibi iletilir |
application/xml |
false |
Olduğu gibi iletilir |
application/atom+xml |
false |
Olduğu gibi iletilir |
application/javascript |
false |
Olduğu gibi iletilir |
| Diğer tüm değerler | true |
İşleve iletilmeden önce Base64 ile kodlanır |
İstek eşleme örnekleri
GET
| HTTP isteği | Olay nesnesi |
|---|---|
GET /?parameter1=value1¶meter2=value2 HTTP/1.1 |
{"version":"v1","rawPath":"/","headers":{"Accept":"*/*","User-Agent":"CurlHttpClient"},"queryParameters":{"parameter1":"value1","parameter2":"value2"},"body":"","isBase64Encoded":true,"requestContext":{"accountId":"1327**********","domainName":"example.cn-hangzhou.fcapp.run","domainPrefix":"example","requestId":"1-67aee50c-****-**********","time":"2025-02-14T06:39:08Z","timeEpoch":"1739515148145","http":{"method":"GET","path":"/","protocol":"HTTP/1.1","sourceIp":"40.XX.XX.XX","userAgent":"CurlHttpClient"}}} |
Bu isteği CLI'dan göndermek için https://example.cn-hangzhou.fcapp.run adresini işlev URL'nizle değiştirin:
curl -v "https://example.cn-hangzhou.fcapp.run?parameter1=value1¶meter2=value2"
POST
| HTTP isteği | Olay nesnesi |
|---|---|
|
{"version":"v1","rawPath":"/","headers":{"Accept":"*/*","Content-Length":"20","Content-Type":"application/json","User-Agent":"curl/8.7.1"},"queryParameters":{},"body":"{\"message\": \"Hello\"}","isBase64Encoded":false,"requestContext":{"accountId":"1327**********","domainName":"example.cn-hangzhou.fcapp.run","domainPrefix":"example","requestId":"1-67aee50c-****-**********","time":"2025-02-14T06:39:08Z","timeEpoch":"1739515148145","http":{"method":"POST","path":"/","protocol":"HTTP/1.1","sourceIp":"40.XX.XX.XX","userAgent":"CurlHttpClient"}}} |
Bu isteği CLI'dan göndermek için https://example.cn-hangzhou.fcapp.run adresini işlev URL'nizle değiştirin:
curl -v -H "Content-Type: application/json" -d '{"message": "Hello"}' "https://example.cn-hangzhou.fcapp.run"
İstek gövdesinin Base64 ile kodlanmasını zorlamak içinContent-Typedeğeriniapplication/x-www-form-urlencodedolarak ayarlayın.
Yanıt yapısı
Biçim
İşlev çıkışınız HTTP yanıtına eşlenmeden önce bir yanıt yapısına ayrıştırılır:
{
"statusCode": 200,
"headers": {
"Content-Type": "application/json",
"Custom-Header-1": "Custom Value"
},
"isBase64Encoded": false,
"body": "{\"message\":\"Hello FC!\"}"
}
Eşleme mantığı
Function Compute, işlev çıkışınızı statusCode alanı içeren geçerli bir JSON olup olmamasına göre HTTP yanıtına eşler.
**Çıkış, statusCode içeren geçerli bir JSON olduğunda:**
| Yanıt yapısı alanı | HTTP yanıtı |
|---|---|
statusCode |
Durum kodu |
headers["Content-Type"] |
Content-Type üst bilgisi (yoksa varsayılan olarak application/json olur) |
body |
Yanıt gövdesi |
isBase64Encoded |
Gövdenin gönderilmeden önce Base64 ile kodunun çözülüp çözülmeyeceği (yoksa varsayılan olarak false olur) |
**Çıkış, statusCode içermeyen geçerli bir JSON olduğunda veya JSON olmadığında:**
Function Compute aşağıdaki varsayılanları kullanır:
| Alan | Varsayılan değer |
|---|---|
statusCode |
200 |
Content-Type |
application/json |
body |
İşlev çıkışı olduğu gibi |
isBase64Encoded |
false |
Yanıt eşleme örnekleri
Aşağıdaki örneklerde işlev çıkışının ayrıştırmadan geçerek nihai HTTP yanıtına nasıl dönüştürüldüğü gösterilmektedir.
Dize yanıtı için çıkış
| İşlev çıkışı | Ayrıştırılmış yanıt yapısı | HTTP yanıtı (istemci alır) |
|---|---|---|
Hello World! |
{"statusCode":200,"body":"Hello World!","headers":{"content-type":"application/json"},"isBase64Encoded":false} |
|
JSON yanıtı için çıkış
| İşlev çıkışı | Ayrıştırılmış yanıt yapısı | HTTP yanıtı (istemci alır) |
|---|---|---|
{"message": "Hello World!"} |
{"statusCode":200,"body":"{\"message\": \"Hello World!\"}","headers":{"content-type":"application/json"},"isBase64Encoded":false} |
|
Özel yanıt için çıkış
| İşlev çıkışı | Ayrıştırılmış yanıt yapısı | HTTP yanıtı (istemci alır) |
|---|---|---|
{"statusCode":201,"headers":{"Content-Type":"application/json","My-Custom-Header":"Custom Value"},"body":{"message":"Hello, world!"},"isBase64Encoded":false} |
{"statusCode":201,"headers":{"Content-Type":"application/json","My-Custom-Header":"Custom Value"},"body":{"message":"Hello, world!"},"isBase64Encoded":false} |
|
Base64 kod çözme
İşleviniz isBase64Encoded değeri true olarak ayarlanmış geçerli bir JSON döndürürse Function Compute, body değerini HTTP yanıt gövdesine eşlemeden önce Base64 ile kodunu çözer. Kod çözme işlemi başarısız olursa Function Compute bir hata bildirmeden body değerini doğrudan döndürür.
Yanıt üst bilgileri
Function Compute, her yanıta otomatik olarak X-Fc-Request-Id üst bilgisini ekler. Bu üst bilgi isteği benzersiz şekilde tanımlar ve günlüklerin izlenmesi ile hataların teşhis edilmesi için kullanışlıdır. X-Fc-Request-Id dışında Function Compute varsayılan olarak başka herhangi bir yanıt üst bilgisi eklemez.
X-Fc- ön ekine sahip özel üst bilgiler desteklenmez. Aşağıdaki üst bilgiler Function Compute tarafından ayrılmıştır ve işleviniz tarafından döndürülürse yoksayılır:
connectioncontent-lengthdatekeep-aliveservercontent-disposition
Hata işleme
HTTP tetikleyicisi çağrıları ile doğrudan API çağrıları işlev hatalarını farklı şekilde işler.
| Çağrı türü | Hata davranışı | HTTP durum kodu |
|---|---|---|
| Doğrudan API çağrısı | Yanıt gövdesinde hata mesajı döndürülür | 200 |
| HTTP tetikleyicisi (işlev URL'si) | Hata mesajı gizlenir; Internal Server Error döndürülür |
502 |
Örneğin, bir Python ModuleNotFoundError hatasıyla karşılaşan doğrudan bir API çağrısı aşağıdaki hata ayrıntılarını döndürür:
{
"errorMessage": "Unable to import module 'index'",
"errorType": "ImportModuleError",
"stackTrace": [
"ModuleNotFoundError: No module named 'not_exist_module'"
]
}
HTTP tetikleyicisi aracılığıyla çağrılan bir işlev bir hatayla karşılaştığında istemci şu şekilde bir yanıt alır:
HTTP/1.1 502 Bad Gateway
Content-Disposition: attachment
Content-Type: application/json
X-Fc-Request-Id: 1-64f6df91-fe144d52e4fd27afe3d8dd6f
Content-Length: 21
Internal Server Error
İşlevinizin çağrı günlüklerinde tam hata ayrıntılarını aramak için X-Fc-Request-Id değerini kullanın.
İlgili konular
Yerleşik bir çalışma zamanı için işlev kodu yazıyorsanız dilinize ilişkin işleyici belgelerine bakın: