-
Notifications
You must be signed in to change notification settings - Fork 1
/
README.md
134 lines (105 loc) · 2.89 KB
/
README.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# @squelette/request-gen [![npm version](https://badge.fury.io/js/%40squelette%2Frequest-gen.svg)](https://badge.fury.io/js/%40squelette%2Frequest-gen)
An API request hints generator from Open API 3.0 spec.
# Requirements
You need to set `strictPropertyInitialization` TS compiler options to `false`.
# About package
This packages generates API Request hints which may be useful for those who using [axios](https://www.npmjs.com/package/axios) and other HTTP client libraries.
# Install
```sh
$ yarn add @squelette/request-gen
```
# How to use
```sh
$ request-gen generate spec.yml --dist requests
```
# CLI Options
```
Usage: request-gen [options] [command]
Generate type definitions from swagger specs
Options:
-V, --version output the version number
-h, --help output usage information
Commands:
generate [options] <file>
Options:
-d, --dist <dist> Output directory
-h, --help output usage information
```
# Usage
To give you a better sense, here's a simple example.
```yaml
openapi: "3.0.0"
...
paths:
/pets/{petId}:
get:
operationId: showPetById
tags:
- pets
parameters:
- name: petId
in: path
required: true
description: The id of the pet to retrieve
schema:
type: string
responses:
'200':
description: Expected response to a valid request
content:
application/json:
schema:
$ref: "#/components/schemas/Pets"
components:
schemas:
Pet:
...
```
This schema will be converted to...
```js
import * as operations from "./gen-ts";
export class showPetById
implements APIRequest<operations.showPetByIdResponse> {
response: operations.showPetByIdResponse;
method = HTTPMethod["get"];
path: string;
params?: operations.showPetByIdRequest;
constructor(args: {
params?: operations.showPetByIdRequest;
pathParameter: operations.showPetByIdPathParameter;
}) {
const { params, pathParameter } = args;
this.params = params;
this.path = `/pets/${pathParameter.petId}`;
}
}
```
The generated schema can be used with your API client like this.
```js
# Your API Client
import axios from 'axios'
class APIClient {
baseURL = 'https//hogehoge.com'
request<U>(hint: APIRequest<U>): Promise<U> {
const isRead = request.method === HTTPMethod.GET
return axios.request({
url: hint.path,
method: hint.method,
params: isRead && request.params,
data: !isRead && request.params,
baseURL: request.baseURL || this.baseURL
})
}
}
# Call API
import { showPetByID } from './requests'
new APIClient().request(new showPetByID({
pathParameter: {
petId: 'hoge'
}
}))
```
# Detailed Example
See [example](https://github.com/andoshin11/squelette/tree/master/packages/squelette-request-gen/example/README.md).
# License
MIT