elixir-tesla/tesla

GitHub: elixir-tesla/tesla

Tesla 是一个基于中间件架构的灵活 Elixir HTTP 客户端库,通过可组合的中间件管道和多种适配器简化 HTTP 请求与响应处理。

Stars: 2073 | Forks: 368

# Tesla [![Test](https://static.pigsec.cn/wp-content/uploads/repos/cas/ba/babb5334241d8d8db5d9626d913733c8bb9b24d09b622e29e0cf84b6913fb0be.svg)](https://github.com/elixir-tesla/tesla/actions/workflows/test.yml) [![Hex.pm](https://img.shields.io/hexpm/v/tesla.svg)](https://hex.pm/packages/tesla) [![Hexdocs.pm](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/tesla/) [![Hex.pm](https://img.shields.io/hexpm/dt/tesla.svg)](https://hex.pm/packages/tesla) [![Hex.pm](https://img.shields.io/hexpm/dw/tesla.svg)](https://hex.pm/packages/tesla) [![codecov](https://codecov.io/gh/elixir-tesla/tesla/branch/master/graph/badge.svg)](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, 中间件, 开发库, 网络请求