#wasmcloud #actor #capability #api-bindings #http-interface #capability-provider

wasmcloud-interface-httpclient

演员发起http/https请求的接口(wasmcloud:httpclient)

18个版本 (10个重大变更)

0.11.0 2023年9月19日
0.10.0 2023年7月20日
0.9.0 2023年4月12日
0.8.1 2022年11月23日
0.1.0 2021年7月23日

#125 in WebAssembly

Download history 9/week @ 2024-03-13 24/week @ 2024-03-27 51/week @ 2024-04-03 173/week @ 2024-04-17 47/week @ 2024-04-24

每月146次下载
用于 dtbh_interface

Apache-2.0 和可能 LGPL-3.0-or-later

23KB
433 代码行

crates.io  TinyGo 版本

wasmCloud HTTP客户端接口

这是具有合约ID wasmcloud:httpclient 的接口定义。

使用此接口的演员可以发送HTTP请求并接收HTTP响应以进行处理。由于这只是接口,而不是实际提供者,您需要查看各个提供者实现的文档,以获取该提供者支持的链接定义值的列表。

能力提供者实现

以下是为 wasmcloud:httpclient 合约实现的列表。如果您有社区/开源版本,请随时提交PR添加您的实现。

名称 供应商 描述
HTTPClient wasmCloud wasmCloud的HTTP客户端提供者实现

示例用法

🦀 Rust

检索随机XKCD漫画并将响应格式化为HTML页面

use serde::Deserialize;
use wasmbus_rpc::actor::prelude::*;
use wasmcloud_interface_httpclient::*;
use wasmcloud_interface_httpserver::HttpResponse;
use wasmcloud_interface_numbergen::random_in_range;

const MAX_COMIC_ID: u32 = 2500;

#[derive(Deserialize)]
struct XkcdMetadata {
    title: String,
    img: String,
}

async fn get_comic(ctx: &Context) -> RpcResult<HttpResponse> {
    let comic_num = random_in_range(1, MAX_COMIC_ID).await?;

    // make a request to get the json metadata
    let url = format!("https://xkcd.com/{}/info.0.json", comic_num);
    let client = HttpClientSender::new();
    let resp = client.request(ctx, &HttpRequest::get(&url)).await?;

    if !(200..300).contains(&resp.status_code) {
        return Err(format!("HTTP Request error {}", resp.status_code.to_string(),).into());
    }
    let comic = serde_json::from_slice::<XkcdMetadata>(&resp.body)
        .map_err(|_| "Error deserializing response body")?;
    let html = format!(
        r#"<!DOCTYPE html>
        <html>
        <head>
            <title>Your XKCD random comic</title>
        </head>
        <body>
            <h1>{}</h1>
            <img src="{}"/>
        </body>
        </html>
        "#,
        &comic.title, &comic.img
    );
    let resp = HttpResponse {
        body: html.into_bytes(),
        ..Default::default()
    };
    Ok(resp)
}

🐭 Golang

获取IP地址

func GetIpAddress(ctx *actor.Context) ([]byte, error) {
	client := httpclient.NewProviderHttpClient()

	resp, err := client.Request(ctx, httpclient.HttpRequest{
		Method: "GET",
		Url:    "https://ifconfig.io/ip",
		// Body can not be blank due to a bug
		Body: []byte("a"),
	})
	if err != nil {
		return nil, err
	}

	return resp.Body, nil
}

依赖关系

~12–31MB
~504K SLoC