Skip to content

Commit 99b6c3a

Browse files
committed
refactor: 配置classMode改为rest和rpc
1 parent ba0da63 commit 99b6c3a

File tree

4 files changed

+35
-14
lines changed

4 files changed

+35
-14
lines changed

README.md

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,19 +121,40 @@ openapi本地或者远程文件,支持格式:`yaml | json`
121121

122122
### classMode
123123

124-
类型:`'method' | 'uri'`<br>
125-
默认值:`'method'`
124+
类型:`'rest' | 'rpc'`<br>
125+
默认值:`'rest'`
126126

127127
类的生成方式。
128128

129-
- `method`,仅生成 **get|post|put|patch|delete** 几个方法,uri作为第一个参数传入
130-
- `uri`,把 method+uri 拼接成一个方法,比如 **POST /users/{id}** 会变成 **postUsersById()**
129+
- `rest`,仅生成 **get|post|put|patch|delete** 几个方法,uri作为第一个参数传入
130+
- `rpc`,把 method+uri 拼接成一个新方法。
131+
132+
```typescript
133+
const client = new OpenapiClient();
134+
135+
// 有一个接口 -> GET /users/{id}
136+
137+
// rest模式
138+
await client.get('/users/{id}', { params: { id: 1 } });
139+
// rpc模式
140+
await client.getUsersById({ params: { id: 1 } });
141+
```
142+
143+
rest模式的优点:
144+
145+
- 运行时代码少且相对固定,几乎不受接口数量影响
146+
- 不会暴露接口名称,安全性较高
147+
148+
rpc模式的优点:
149+
150+
- 可以生成独立的注释文档
151+
- 可以利用tag生成生成分组,接口越多越方便
131152

132153
### tagToGroup
133154

134155
类型:`boolean`<br>
135156
默认值:`true`
136157

137-
根据Tag生成不同的分组,以类似 **client.user.getUsers()** 这种方式调用。仅在 `classMode=uri` 场景下生效。
158+
根据Tag生成不同的分组,以类似 **client.user.getUsers()** 这种方式调用。仅在 `classMode=rpc` 场景下生效。
138159

139160
如果没有提供tags,则默认合并到`default`分组

src/define-config.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ export interface OpenapiClientConfig {
2424
*/
2525
projectName?: string;
2626
/**
27-
* 类的生成方式。默认值:`method`
28-
* - `method`,仅生成 **get|post|put|patch|delete** 几个方法,uri作为第一个参数传入
29-
* - `uri`,把 method+uri 拼接成一个方法,比如 **POST /users/{id}** 会变成 **postUsersById()**
27+
* 类的生成方式。默认值:`rest`
28+
* - `rest`,仅生成 **get|post|put|patch|delete** 几个方法,uri作为第一个参数传入
29+
* - `rpc`,把 method+uri 拼接成一个方法,比如 **POST /users/{id}** 会变成 **postUsersById()**
3030
*/
31-
classMode?: 'method' | 'uri';
31+
classMode?: 'rest' | 'rpc';
3232
/**
33-
* 根据Tag生成不同的分组,以类似 **client.user.getUsers()** 这种方式调用。仅在 `classMode=uri` 场景下生效。默认值:`true`
33+
* 根据Tag生成不同的分组,以类似 **client.user.getUsers()** 这种方式调用。仅在 `classMode=rpc` 场景下生效。默认值:`true`
3434
*
3535
* 如果没有提供tags,则默认合并到`default`分组
3636
*/

src/lib/generate-template.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ export const generateTemplate = async (
1010
docs: OpenAPIV3.Document,
1111
config: Pick<OpenapiClientConfig, 'projectName' | 'classMode' | 'tagToGroup'>,
1212
) => {
13-
const { projectName, classMode = 'method', tagToGroup = true } = config;
13+
const { projectName, classMode = 'rest', tagToGroup = true } = config;
1414
const className = `OpenapiClient${upperFirst(camelCase(projectName))}`;
1515
const metas = documentToMeta(docs);
1616

1717
const classTpl =
18-
classMode === 'method'
18+
classMode === 'rest'
1919
? generateMethodModeClass(className, metas)
2020
: tagToGroup
2121
? generateUriModelClassWithNamespace(className, metas)

test/lib/generate-template.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ test('完整的类型提示', async () => {
5858
},
5959
},
6060
});
61-
await expect(generateTemplate(docs, { classMode: 'method' })).resolves
61+
await expect(generateTemplate(docs, { classMode: 'rest' })).resolves
6262
.toMatchInlineSnapshot(`
6363
{
6464
"OpenapiClient": {
@@ -126,7 +126,7 @@ test('完整的类型提示', async () => {
126126
}
127127
`);
128128

129-
await expect(generateTemplate(docs, { classMode: 'uri' })).resolves
129+
await expect(generateTemplate(docs, { classMode: 'rpc' })).resolves
130130
.toMatchInlineSnapshot(`
131131
{
132132
"OpenapiClient": {

0 commit comments

Comments
 (0)