@web-bee-ru/openapi-axios
Version:
A TypeScript abstraction over Axios for typed requests generated from OpenAPI (Swagger) schemas using openapi-typescript.
139 lines (102 loc) • 3.43 kB
Markdown
A tiny, type-safe wrapper around [axios](https://axios-http.com) to add support
for full type inference from OpenAPI schema definitions that are generated with
[](https://openapi-ts.dev/introduction).
`validStatus` options configures errors handling strategy and setups returned
value.
Type: `'axios' | 'fetch' | 'all'`
Throws error in next cases:
- response.status >= 400
- request failed (e.g. network error)
- axios.interceptors failed
Example
```ts
import { OpenApiAxios } from "@web-bee-ru/openapi-axios";
import type { paths } from "./my-openapi-3-schema"; // generated by openapi-typescript
import Axios from "axios";
const axios = Axios.create({
baseURL: "/api",
adapter: "fetch", // strongly recommended (available since axios@1.7.0)
});
const api = new OpenApiAxios<paths>(axios);
// const api = new OpenApiAxios<paths, "axios">(axios, { validStatus: "axios" }); // same result
try {
const { status, data, response } = await api.get("/users");
} catch (err) {
if (api.isAxiosError(err)) {
if (typeof err.status === "number") {
// status >= 400
}
// request failed (e.g. network error)
}
throw err; // axios.interceptors error
}
```
Throws error in next cases:
- if request failed (e.g. network error)
- axios.interceptors failed
Example
```ts
import { OpenApiAxios } from "@web-bee-ru/openapi-axios";
import type { paths } from "./my-openapi-3-schema"; // generated by openapi-typescript
import Axios from "axios";
const axios = Axios.create({
baseURL: "/api",
adapter: "fetch", // strongly recommended (available since axios@1.7.0)
});
const api = new OpenApiAxios<paths, "fetch">(axios, { validStatus: "fetch" });
try {
const { status, data, error, response } = await api.get("/users");
if (error) {
// status >= 400
}
} catch (err) {
if (api.isAxiosError(err)) {
// request failed (e.g. network error)
}
throw err; // axios.interceptors error
}
```
Never throws error (thus no try/catch required)
Example
```ts
import { OpenApiAxios } from "@web-bee-ru/openapi-axios";
import type { paths } from "./my-openapi-3-schema"; // generated by openapi-typescript
import Axios from "axios";
const axios = Axios.create({
baseURL: "/api",
adapter: "fetch", // strongly recommended (available since axios@1.7.0)
});
const api = new OpenApiAxios<paths, "all">(axios, { validStatus: "all" });
const { status, data, error, response } = await api.get("/users");
if (error) {
if (typeof status === "number") {
// status >= 400
} else if (api.isAxiosError(error)) {
// request failed (e.g. network error)
}
throw error; // axios.interceptors error
}
```
```ts
// openapi-fetch
// - if 2xx, then { data }
// - if 4xx or 5xx, then { error }
// - if another error (e.g. request failed), then catch
// axios
// - if 2xx, then { data }
// - if 4xx or 5xx, then catch (isAxiosError works)
// - if another error (e.g. request failed), then catch (isAxiosError works)
// - if interceptor error, then catch (isAxiosError DOESN't work)
```
Special thanks to
- [@IRaccoonI](https://github.com/IRaccoonI) (contributor)
- [@Denwa799](https://github.com/Denwa799) (contributor)
- [@simplesmiler](https://github.com/simplesmiler) (creator of [taxios](https://github.com/simplesmiler/taxios))