elixir-tesla/tesla
GitHub: elixir-tesla/tesla
Tesla 是一个基于中间件架构的灵活 Elixir HTTP 客户端库,通过可组合的中间件管道和多种适配器简化 HTTP 请求与响应处理。
Stars: 2073 | Forks: 368
# Tesla
[](https://github.com/elixir-tesla/tesla/actions/workflows/test.yml)
[](https://hex.pm/packages/tesla)
[](https://hexdocs.pm/tesla/)
[](https://hex.pm/packages/tesla)
[](https://hex.pm/packages/tesla)
[](https://codecov.io/gh/elixir-tesla/tesla)
`Tesla` 是一个 HTTP 客户端,它利用 middleware 为各种 adapter 简化 HTTP 请求
和响应,并提供统一的接口。
它通过提供灵活且可组合的 middleware 堆栈来简化 HTTP 通信。
开发者可以轻松地通过组合处理身份验证、日志记录和重试等任务的
middleware 组件,来构建自定义的 API 客户端。`Tesla` 支持多种 HTTP adapter,
例如 `Mint`、`Finch`、`Hackney` 等。
`Tesla` 非常适合需要灵活且高效的 HTTP 客户端的开发者。
它能够替换 HTTP adapter 并创建自定义 middleware pipeline,
使您能够做出不同的架构决策,并以最小的代价构建
量身定制的工具来满足您的应用需求。
灵感来源于 Ruby 的 [Faraday](https://github.com/lostisland/faraday)。
## 快速入门
在 `mix.exs` 中添加 `:tesla` 作为依赖项:
```
defp deps do
[
# or latest version
{:tesla, "~> 1.11"},
# optional, required by JSON middleware
{:jason, "~> 1.4"},
# optional, required by Mint adapter, recommended
{:mint, "~> 1.0"}
]
end
```
在 `config/config.exs` 中配置默认 adapter。
```
# config/config.exs
# 确保同时安装 `mint` 包,推荐
config :tesla, adapter: Tesla.Adapter.Mint
```
要发起一个简单的 GET 请求,请运行 `iex -S mix` 并执行:
```
iex> Tesla.get!("https://httpbin.org/get").status
# => 200
```
这不会包含任何 middleware,并且将使用全局默认 adapter。
创建一个 client 来组合 middleware 并在多个请求中复用它。
```
iex> client = Tesla.client([
...> {Tesla.Middleware.BaseUrl, "https://httpbin.org/"},
...> Tesla.Middleware.JSON,
...> ])
iex> Tesla.get!(client, "/json").body
# => %{"slideshow" => ...}
```
最后,您可以强制指定 client 使用特定的 adapter:
```
iex> client = Tesla.client([], {Tesla.Adapter.Hackney, pool: :my_pool})
```
祝您编码愉快!
## 接下来做什么?
查看以下章节以了解更多关于 `Tesla` 的信息:
### 说明
- [Client](./guides/explanations/0.client.md)
- [测试](./guides/explanations/1.testing.md)
- [Middleware](./guides/explanations/2.middleware.md)
- [Adapter](./guides/explanations/3.adapter.md)
- [OpenAPI](./guides/explanations/4.openapi.md)
### 操作指南
- [使用 OpenAPI 参数](./guides/howtos/openapi-parameters.md)
#### 迁移
- [从 v0 迁移到 v1.x](./guides/howtos/migrations/v0-to-v1.md)
### 参考
- [通用速查表](./guides/cheatsheets/general.cheatmd)
- [实用手册](https://github.com/elixir-tesla/tesla/wiki)
#### Middleware
`Tesla` 围绕可组合 middleware 的概念构建。
- `Tesla.Middleware.BaseUrl` - 设置 base URL。
- `Tesla.Middleware.Headers` - 设置请求 headers。
- `Tesla.Middleware.Query` - 设置查询参数,包括现代模式下的 OpenAPI 风格
查询序列化。
- `Tesla.Middleware.Opts` - 设置请求选项。
- `Tesla.Middleware.FollowRedirects` - 跟随 HTTP 3xx 重定向。
- `Tesla.Middleware.MethodOverride` - 设置 `X-Http-Method-Override` header。
- `Tesla.Middleware.Logger` - 记录请求日志(method、url、status 和 time)。
- `Tesla.Middleware.KeepRequest` - 保留请求 `body` 和 `headers`。
- `Tesla.Middleware.PathParams` - 使用模板化 URL。
##### 格式
- `Tesla.Middleware.FormUrlencoded` - 对 POST body 进行 URL 编码,非常适合 POST
map/keyword list。
- `Tesla.Middleware.JSON` - 编码/解码 JSON 请求/响应 body。
- `Tesla.Middleware.Compression` - 使用
`gzip` 和 `deflate` 压缩请求/响应 body。
- `Tesla.Middleware.DecodeRels` - 将 `Link` header 解码到响应中的 `opts[:rels]`
字段。
##### 认证
- `Tesla.Middleware.BasicAuth` - HTTP Basic Auth。
- `Tesla.Middleware.BearerAuth` - HTTP Bearer Auth。
- `Tesla.Middleware.DigestAuth`] - Digest access authentication。
##### 错误处理
- `Tesla.Middleware.Timeout` - X 毫秒后使请求超时,而不顾
服务器响应。
- `Tesla.Middleware.Retry` - 在连接被拒绝时重试几次。
- `Tesla.Middleware.Fuse` - fuse 断路器集成。
#### Adapters
Tesla 支持多种执行实际 HTTP 请求处理的 HTTP adapter。
- `Tesla.Adapter.Httpc` - 默认的内置 Erlang [httpc][0] adapter。
- `Tesla.Adapter.Hackney` - [hackney][1],Erlang 中简单的 HTTP 客户端。
- `Tesla.Adapter.Ibrowse` - [ibrowse][2],Erlang HTTP 客户端。
- `Tesla.Adapter.Gun` - [gun][3],用于
Erlang/OTP 的 HTTP/1.1、HTTP/2 和 Websocket 客户端。
- `Tesla.Adapter.Mint` - [mint][4],支持 HTTP/1 和 HTTP/2 的 Elixir 函数式
HTTP 客户端。
- `Tesla.Adapter.Finch` - [finch][5],注重
性能的 HTTP 客户端,构建在 [Mint][4] 和 [NimblePool][6] 之上。
## 赞助商
- [ubots - 使用 Slack 轻松实现终极生产力](https://ubots.co/)
标签:Elixir, 中间件, 开发库, 网络请求