2 个版本 (1 个稳定版)
1.0.0 | 2023 年 7 月 27 日 |
---|---|
0.1.0 | 2023 年 6 月 30 日 |
#1853 in Web 编程
62KB
1.5K SLoC
apictl
apictl
是一个用于与 API 交互的命令行应用程序。请参阅下面的文档或运行 apictl help
获取详细信息。
安装
二进制文件可通过 发布 获得。
您也可以使用 cargo 安装它
cargo install apictl
入门
示例
此仓库包含一个示例 .apictl.yaml 文件。它与 Typicode 的 json-server
交互。您可以通过 npm 安装它,然后在其他 shell 中运行它
npm install -g json-server
json-server http://jsonplaceholder.typicode.com/db
现在您应该能够克隆此仓库并在其中运行示例
git clone https://github.com/icub3d/apictl
cd apictl
apictl requests list
apictl requests run -c local get-posts get-user-from-first-post
apictl requests run -c local new-post get-new-post
从头开始
如果您想使用现有的 API,请先为其创建一个 配置。配置通常位于创建 API 的仓库中。
接下来,为将要使用的各种环境创建 环境。
然后创建任何您感兴趣运行的 API 调用的 请求。
最后,在发布代码之前对您的配置进行一些测试。
配置
您可以通过查看 .apictl.yaml 来了解示例配置。配置使用 YAML 定义。默认情况下,apictl
将在当前目录中查找名为 .apictl.yaml
的文件。
如果您的项目足够大,您可以使用文件夹来存储多个配置文件。为此,请使用带有标志 --config CONFIG
运行 apictl
,其中 CONFIG 是您的文件夹路径。文件夹将按顺序读取,并合并配置。当信息重叠(例如,具有相同名称的两个请求)时,后者将覆盖前者。
配置中值的详细信息请参阅下面。
环境
上下文是用于定义API调用变量的方法。在你的配置中,它们在contexts
键下创建。每个上下文都是一个包含变量和替换值的映射。例如,假设你想区分本地、开发、预发布和产品环境中的请求URL。你可能这样做:
contexts:
local:
base_url: https://127.0.0.1:3000
dev:
base_url: https://dev.app
staging:
base_url: https://staging.app
prod:
base_url: https://my-cool-api.com
现在你可以在请求中使用变量base_url
,它将被上下文提供的值替换。如果你想使用开发环境运行请求,你需要添加一个标志--context dev
。
目前,如果变量是字符串,则会在请求中替换所有变量。如果正文包含字符串,则会被替换。文件引用的路径将被替换,但实际内容不会替换。
变量
一旦定义了上下文,你可以在配置中使用它们,使用模式${name}
,其中name是上下文中的键。
多个上下文
你可以使用多个上下文,它们以类似配置的方式合并。当你有多个可能不重叠的交互时,这可能很有用。例如,你可能需要对同一API进行多个身份验证机制的测试。你可以使用一个上下文用于环境,然后用于身份验证方法。
要使用多个上下文,只需在命令中添加多个上下文标志:--context basic-auth --context local
。
请求
请求是API端点和执行请求所需的信息。它们还包含基本信息,如tags
和descriptions
,可用于搜索请求。
在你的配置中,它们在requests
键下创建。它们包含请求方法、URL、查询参数、头和正文的配置。除了正文之外,所有这些都是不言自明的。以下是一个示例请求:
requests:
get-posts:
tags: [get]
description: a simple get
url: "${base_url}/posts"
query_parameters:
_limit: "${pagination_limit}"
正文
请求正文可以有多种形式。本节将详细描述每种形式及其用法。每种正文类型都由type
字段描述。
表单
如果你只想提交键/值对,可以使用“form”type
,它将发送一个application/x-www-form-urlencoded
。以下是一个示例:
requests:
new-post:
tags: [post]
description: an example post using the form type
url: "${base_url}/posts"
method: POST
body:
type: form
data:
name: World
age: 4.543 billion years
多部分表单
如果你要发送文件,你可能想使用多部分格式。它与表单类似,但允许你指定每个字段的类型。你使用“multipart”type
,它将发送一个多部分消息。以下是一个示例:
requests:
new-post:
tags: [post]
description: an example post using the multipart type
url: "${base_url}/posts"
method: POST
body:
type: multipart
data:
name:
type: text
data: World
age:
type: text
data: 4.543 billion years
avatar:
type: file
path: ./avatar.png
“file”type
将期望在给定的path
中有一个文件,并将它的内容放入表单提交中。
原始
如果你只想提交原始正文,请使用“raw”type
。数据可以来自文本或文件,并将内容作为正文发送。以下是一个使用文本的示例
requests:
new-post:
tags: [post]
description: an example post using the raw type
url: "${base_url}/posts"
method: POST
body:
type: raw
from:
type: text
data: |
{
"userId": 1,
"title": "test post",
"body": "This is a test post to the json server."
}
以下是一个使用文件的示例
requests:
new-post:
tags: [post]
description: an example post using the raw type
url: "${base_url}/posts"
method: POST
body:
type: raw
from:
type: file
path: ./new-post-body.json
依赖项
~15–29MB
~440K SLoC