HTTP İstemcisi
lib/http_client.tpr, gömülü outbound HTTP kütüphanesidir. Bir Tulpar
programının içinden başka API’leri çağırmak için kullan — ekstra
dependency yok, npm install yok.
import "http_client";
json r = http_get("http://api.example.com/users/1");if (r["ok"]) { print("status=" + toString(r["status"])); print("body=" + r["body"]);}Yardımcılar
Section titled “Yardımcılar”| Helper | Sarar |
|---|---|
http_get(url) | Boş gövdeli GET |
http_post(url, body) | Ham string gövdeli POST |
http_put(url, body) | PUT |
http_delete(url) | DELETE |
http_get_json(url) | GET + 2xx ise fromJson(body) |
http_post_json(url, data) | toJson(data) POST + cevabı parse |
http_request(method, url, body) | Düşük seviye primitif |
Cevap şekli
Section titled “Cevap şekli”Tüm helper’lar aynı zarfı döner:
json r = http_get("http://api.example.com/");
if (r["ok"]) { int status = r["status"]; // 200, 404, ... json headers = r["headers"]; // case-sensitive header haritası str body = r["body"]; // ham response gövdesi} else { str why = r["error"]; // "connect failed", "TLS handshake failed", ...}_json varyantları ek olarak r["body"]’yi parse edip r["data"]’ya
koyar:
json r = http_get_json("http://api.example.com/users/1");if (r["ok"]) { json user = r["data"]; print("merhaba " + user["name"]);}https:// URL’leri Tulpar’ın OpenSSL ile build’ini gerektirir. Yoksa
çağrı {"ok": 0, "error": "TLS not compiled in (build Tulpar with OpenSSL to enable https://)"} döner.
MSYS2’de TLS aktive etmek için:
pacman -S mingw-w64-x86_64-openssl./build.shCMake find_package(OpenSSL) ile otomatik algılar ve TULPAR_HAS_TLS=1
define’ını açar. SNI otomatik set, sertifika doğrulama şu an
SSL_VERIFY_NONE (yapılandırılabilir trust-store yolu inene kadar).
Async (bloklamayan) istekler
Section titled “Async (bloklamayan) istekler”Her fiilin bloklamak yerine bir promise döndüren bir _async ikizi
vardır: http_get_async, http_post_async, http_put_async,
http_delete_async (http_request_async built-in’ini sarmalar). İstek
bir worker pool’da koşarken async event loop diğer
coroutine’leri pompalamaya devam eder; böylece birden çok upstream’e
aynı anda dağılıp sonuçları gather edebilirsiniz:
import "http_client";
async func dashboard() { // Üç upstream eşzamanlı çekilir — toplam süre ~ en yavaş olanı. var r = await gather( http_get_async("http://api/users"), http_get_async("http://api/orders"), http_get_async("http://api/stats") ); return r;}
var data = await dashboard();print(toString(data[0]["status"])); // 200Çözülen değer, bloklayan istemciyle aynı { ok, status, headers, body }
zarfıdır. Worker-pool boyutu default 4’tür; TULPAR_HTTP_POOL ortam
değişkeniyle değiştirin. Tam eşzamanlılık modeli ve bir istek reject
ettiğinde hata yönetimi için Async / Await rehberine
bakın.
Sınırlar
Section titled “Sınırlar”Bugün:
- HTTP/1.0 (client tarafında keep-alive yok)
- OpenSSL ile derlendiğinde HTTPS
- 8 MB cevap gövdesi sınırı
- Otomatik redirect takibi yok
- Chunked transfer-encoding yok