request মডিউল

Axios-স্টাইল HTTP client। প্রতিটি verb Future ফেরত দেয় — straight-line কোডের জন্য wait-এর সাথে ব্যবহার। প্রতিটি call-এ optional config map (headers/params/timeout ইত্যাদি)। JSON ও form body auto-encode। Connection pooling, before/after interceptor, ফাইল upload/download।

import "request" as r;

function main() {
    var resp = wait r.get("https://api.example.com/users/1");
    print(resp.status, resp.body);

    var created = wait r.post(
        "https://api.example.com/users",
        { name: "Alice" },                              // auto-JSON
        { headers: { "X-Trace": "abc" }, timeout: 5000 }
    );
    print("created id:", created.data.id);
}
main().fail(function (e) { print("err:", e); });

Verb শর্টকাট

প্রতিটি verb optional config map নেয় (headers, params, timeout ইত্যাদি)। verb-এর URL, method, এবং body সবসময় config-এর উপরে — config additive।

ফাংশনবর্ণনা
r.get(url, config?)Future<resp> ফেরত দেয়।
r.head(url, config?)
r.delete(url, config?)
r.post(url, data, config?)data string (raw body) বা map (auto-JSON)।
r.put(url, data, config?)
r.patch(url, data, config?)
r.post_form(url, fields, config?)URL-encoded form।
r.request(config)পূর্ণ option ফর্ম।

Config key

Keyবর্ণনা
headersHeader name → value map।
paramsQuery string-এ serialize হয়।
timeoutMillisecond। অতিক্রম করলে timeout error দিয়ে reject।
jsonMap — JSON body (Content-Type auto)।
formMap — application/x-www-form-urlencoded
bodyRaw string body। Content-Type নিজে সেট করুন।
dataSmart: map → JSON, string → text/plain।
poolKeep-alive pool ব্যবহার করতে true
tlsTLS option (যেমন self-signed-এর জন্য {verify: false})।
base_url(শুধু instance) relative URL-এ prepend।

Instance

var api = r.create({
    base_url: "https://api.example.com",
    headers:  { "Authorization": "Bearer " + token }
});
var users = wait api.get("/users", { params: { limit: 10 } });
ফাংশনবর্ণনা
r.create(defaults) → instanceBase URL, default header/timeout ইত্যাদি।
r.before(fn) / api.before(fn)before(cfg) → cfg — পাঠানোর আগে config পরিবর্তন।
r.after(fn) / api.after(fn)after(resp) → resp — ফেরতের আগে response পরিবর্তন।

ফাইল ট্রান্সফার

ফাংশনবর্ণনা
r.download(url, dest, config?) → Futureফাইলে stream। {status, headers, dest, bytes_written, ok} দিয়ে resolve।
r.upload(url, file, config?) → FutureMultipart POST। file path string বা spec map। Extra field: config.fields

Connection pool

scheme://host:port প্রতি keep-alive pool। প্রতি call-এ config.pool: true দিয়ে বা r.create({...pool: true}) দিয়ে। প্রসেস শেষে clean drain-এর জন্য r.shutdown()

Response object

resp-এ থাকে: status, headers (lowercased), body, data (JSON হলে parsed), ok (2xx?), json() (on-demand re-parse)।

4xx/5xx response Future fulfill করে (resp.ok=false পাবেন)। শুধু transport-level error-এ (DNS, TCP, TLS, timeout) reject হয়।

আরও দেখুন