Skip to content

Request Builder ​

RequestBuilder, HTTP istekleri oluşturmak için akıcı, zincirleme bir API sağlar. build() dışındaki her metot this döndürür; bu sayede çağrılar son .build() çağrısından önce herhangi bir sırayla zincirlenebilir.

Temel Kullanım ​

typescript
import { RequestBuilder, HttpMethod } from '@yildizpay/http-adapter';

const request = new RequestBuilder('https://api.example.com')
  .setEndpoint('/users')
  .setMethod(HttpMethod.POST)
  .addHeader('Authorization', 'Bearer token')
  .setBody({ name: 'Alice', email: '[email protected]' })
  .build();

Temel URL constructor'a geçirilir. Diğer tüm özellikler builder metotları aracılığıyla ayarlanır.

API Referansı ​

setEndpoint(path: string) ​

Temel URL'ye bir yol segmenti ekler. Baştaki eğik çizgiler otomatik olarak işlenir.

typescript
new RequestBuilder('https://api.example.com')
  .setEndpoint('/users/123')
// → https://api.example.com/users/123 olarak çözümlenir

setMethod(method: HttpMethod) ​

HTTP fiilini ayarlar. Çağrılmazsa varsayılan olarak HttpMethod.GET kullanılır.

typescript
enum HttpMethod {
  GET     = 'GET',
  POST    = 'POST',
  PUT     = 'PUT',
  PATCH   = 'PATCH',
  DELETE  = 'DELETE',
  HEAD    = 'HEAD',
  OPTIONS = 'OPTIONS',
}

addHeader(name: string, value: string) ​

Tek bir istek başlığı ekler. Birden fazla başlık eklemek için birden fazla kez çağrılabilir.

typescript
builder
  .addHeader('Authorization', 'Bearer my-token')
  .addHeader('X-Request-Source', 'payment-service')

setBody(body: unknown) ​

İstek gövdesini ayarlar. Değer otomatik olarak JSON'a serileştirilir ve Content-Type: application/json başlığı eklenir.

setQueryParams(params: Record<string, string | number | boolean>) ​

URL'ye sorgu parametreleri ekler.

typescript
new RequestBuilder('https://api.example.com')
  .setEndpoint('/orders')
  .setQueryParams({ page: 2, limit: 50, status: 'pending' })
// → https://api.example.com/orders?page=2&limit=50&status=pending

validateWith(...validators: ResponseValidator[]) ​

HTTP çağrısı başarılı olduktan sonra otomatik olarak çalışan bir veya daha fazla yanıt doğrulayıcı ekler. Ayrıntılar için Yanıt Doğrulayıcılar sayfasına bakın.

typescript
builder.validateWith(new OdemeSchemaValidator(), new OdemeDurumValidator())

Tip Güvenliği ​

Yanıt tipi T, builder'da değil send() çağrısında belirtilir. Oluşturulan Request nesnesi tip bağımsızdır ve yeniden kullanılabilir:

typescript
interface Urun {
  id: string;
  name: string;
  price: number;
}

const request = new RequestBuilder('https://api.example.com')
  .setEndpoint('/products/abc')
  .build();

const response = await adapter.send<Urun>(request);
// response.data, Urun olarak tiplendirilmiştir

İstekleri Yeniden Kullanma ​

build(), değiştirilemez (immutable) bir Request nesnesi üretir. İstek şablonlarını bir kez tanımlayıp birden fazla kez güvenle gönderebilirsiniz — her çağrı otomatik olarak kendi correlationId'sini alır:

typescript
const getMeRequest = new RequestBuilder('https://api.example.com')
  .setEndpoint('/users/me')
  .setMethod(HttpMethod.GET)
  .build();

// Güvenle yeniden kullanılabilir — paylaşılan değişken durum yok
const r1 = await adapter.send<User>(getMeRequest);
const r2 = await adapter.send<User>(getMeRequest);

İstek Bazlı Yapılandırma Geçersiz Kılmaları ​

Bireysel istekler, diğer istekleri etkilemeden adaptörün global retry politikasını, circuit breaker'ını ve interceptor'larını geçersiz kılabilir. Ayrıntılar için İstek Bazlı Geçersiz Kılma sayfasına bakın.

Released under the MIT License.