SDKs

.NET / C#

Thunderbit Open API 的 .NET 地道寫法

用內建的 HttpClient + System.Text.Json,全程 async/await。目標版本 .NET 6+。

設定

using System.Net.Http.Json;
using System.Text.Json;

const string Api = "https://openapi.thunderbit.com/openapi/v1";

var client = new HttpClient
{
    BaseAddress = new Uri(Api + "/"),
    Timeout = TimeSpan.FromSeconds(60),
};
client.DefaultRequestHeaders.Authorization =
    new("Bearer", Environment.GetEnvironmentVariable("THUNDERBIT_API_KEY"));

Distill 一個頁面

var res = await client.PostAsJsonAsync("distill", new {
    url = "https://thunderbit.com/playground"
});
res.EnsureSuccessStatusCode();
var json = await res.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(json.GetProperty("data").GetProperty("markdown").GetString());

Extract 結構化資料

record Product(string Name, decimal Price, string? Currency);

var res = await client.PostAsJsonAsync("extract", new {
    url = "https://example.com/product/iphone-15-pro",
    schema = new {
        type = "object",
        properties = new {
            name  = new { type = "string" },
            price = new { type = "number" },
        },
        required = new[] { "name", "price" },
    }
});
var body = await res.Content.ReadFromJsonAsync<JsonElement>();
var product = body.GetProperty("data").Deserialize<Product>(
    new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });

Batch + Webhook

var job = await client.PostAsJsonAsync("batch/distill", new {
    urls = new[] { "https://example.com/page1", "https://example.com/page2" },
    webhook = new {
        url    = "https://your-server.com/webhook",
        secret = Environment.GetEnvironmentVariable("WEBHOOK_SECRET"),
    }
});
var body = await job.Content.ReadFromJsonAsync<JsonElement>();
var jobId = body.GetProperty("data").GetProperty("id").GetString();

在你的 handler 裡驗證 Webhook 簽名 —— 參見 Webhooks

官方 .NET SDK 開發中 —— 敬請期待。