GET İstekleri ve Önbellekleme
Connect, idempotent, yan etkisiz isteklerin HTTP GET tabanlı protokol kullanarak yapılmasını destekler. Bu, belirli türdeki isteklerin tarayıcıda, CDN'inizde veya proxy'lerde ve diğer ara kutularda önbelleğe alınmasını kolaylaştırır.
Bu işlevsellik, yalnızca Connect protokolü kullanıldığında desteklenmektedir—yani Connect istemcisi ile bir Connect servisi kullanırken. Connect sunucuları ile gRPC istemcileri veya gRPC sunucuları ile Connect istemcileri kullanıldığında, tüm istekler HTTP POST kullanacaktır.
Vanilla gRPC sunucusu ile iletişim kurarken HTTP GET desteğine ihtiyacınız varsa, bir proxy kullanabilirsiniz. Envoy, Connect istemcileri ile gRPC sunucuları arasında çeviri yapmayı destekler; bu, Connect-gRPC Bridge kullanılarak yapılabilir.
Eğer istemcilerinizi sorgu tarzı istekler yapmak için kullanıyorsanız, Connect HTTP GET isteği desteğini kullanma yeteneğine sahip olmak isteyebilirsiniz. Verilen bir prosedürü kabul etmek için, bunu yan etkisiz olarak işaretlemeniz gerekir; bunu, MethodOptions.IdempotencyLevel
seçeneği kullanarak yapmalısınız:
service ElizaService {
rpc Say(stream SayRequest) returns (SayResponse) {
option idempotency_level = NO_SIDE_EFFECTS;
}
}
İşleyiciler, bu seçeneği kullanarak GET isteklerini otomatik olarak destekler, ancak Connect Node’unuzun yeterince güncel bir sürümüne sahip olduğunuzdan emin olun; v0.9.0 veya daha yeni bir sürüm gereklidir.
Ayrıca, istemcinizde HTTP GET'i kabul etmeniz de gereklidir. Eğer bir Node istemcisi kullanıyorsanız, Connect taşıyıcısını oluştururken useHttpGet
seçeneğini belirtmeniz gerekir:
const transport = createConnectTransport({
baseUrl: "https://demo.connectrpc.com",
useHttpGet: true,
});
const client = createClient(ElizaService, transport);
const response = await client.say(request);
console.log(response);
Yan etkisiz olarak işaretlenen yöntemler GET isteklerini kullanacaktır. Diğer tüm istekler POST kullanmaya devam edecektir.
Diğer istemciler için, ilgili dökümantasyon sayfalarına bakın:
Connect Go
Connect Web
Connect Kotlin
Önbellekleme
GET isteklerini kullanmak, tarayıcıların veya proxy'lerin RPC'lerinizi otomatik olarak önbelleğe alacağı anlamına gelmez. İsteklerin önbelleğe alınmasına izin vermek için, bir işleyici de uygun başlıkları ayarlamalıdır.
Örneğin, max-age
direktifi ile Cache-Control
başlığını ayarlamak isteyebilirsiniz:
say(request, context) {
// ...
context.responseHeader.set("Cache-Control", "max-age=604800");
}
Bu, ajanlara ve proxy'lere isteğin 7 güne kadar önbelleğe alınabileceğini belirtir; bu süre dolduktan sonra yeniden istenmesi gerekmektedir. Uygulamanız için faydalı olabilecek diğer Cache-Control
Yanıt Direktifleri de vardır; örneğin, private
direktifi, isteğin yalnızca özel önbelleklerde, yani kullanıcı aracında önbelleğe alınmasını belirtecek, CDNi veya ters proxy'leri kapsamamaktadır—bu, örneğin, kimlik doğrulama gerektiren istekler için uygun olacaktır.
GET İsteklerini Ayırt Etme
Bazı durumlarda, yalnızca HTTP GET isteklerini işlerken gerçekleşen bir davranış tanıtmak isteyebilirsiniz. Bu, context.requestMethod
kullanılarak gerçekleştirilebilir:
if (context.requestMethod == "GET") {
context.responseHeader.set("Cache-Control", "max-age=604800");
}