apaas-oapi-client 0.1.4 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/UserManual.md ADDED
@@ -0,0 +1,351 @@
1
+ # 背景
2
+
3
+ aPaaS 平台有完整的 Open API 能力,但是目前这些能力全都以单独接口的形式提供给开发者,不方便开发者调试和调用。
4
+ 在此背景下,我们在一店一群项目的基础上,封装 aPaaS 平台 RESTful API 的 Node.js SDK,简化接口调用,内置限流与 token 缓存功能。
5
+
6
+ ## ✨ **功能特性**
7
+
8
+ - ✅ 获取 accessToken,自动管理 token 有效期
9
+
10
+ - ✅ record 单条查询、批量查询(支持分页迭代)
11
+
12
+ - ✅ record 单条创建、批量创建(支持分页迭代)
13
+
14
+ - ✅ record 单条更新、批量更新
15
+
16
+ - ✅ record 单条删除、批量删除
17
+
18
+ - ✅ 内置 Bottleneck 限流器,基于 API 接口配置限流规则
19
+
20
+ - ✅ 自定义日志等级
21
+
22
+ - ……
23
+
24
+
25
+ <br>
26
+
27
+ <br>
28
+
29
+ **📦 安装**
30
+
31
+ ```Bash
32
+ npm install apaas-oapi-client
33
+ # or
34
+ yarn add apaas-oapi-client
35
+ ```
36
+
37
+ ***
38
+
39
+ <br>
40
+
41
+ # **🚀 快速开始**
42
+
43
+ ```JavaScript
44
+ const { apaas } = require('apaas-oapi-client');
45
+
46
+ async function main() {
47
+ const client = new apaas.Client({
48
+ clientId: 'your_client_id',
49
+ clientSecret: 'your_client_secret',
50
+ namespace: 'app_xxx'
51
+ });
52
+
53
+ await client.init();
54
+ client.setLoggerLevel(3); // 设置日志等级 (0-5)
55
+
56
+ console.log('Access Token:', client.token);
57
+ console.log('Namespace:', client.currentNamespace);
58
+ }
59
+
60
+ main();
61
+ ```
62
+
63
+ ***
64
+
65
+ <br>
66
+
67
+ ## **🔐 认证**
68
+
69
+ ### **初始化 Client**
70
+
71
+ | **参数** | **类型** | **说明** |
72
+ | :-- | :-- | :-- |
73
+ | clientId | string | 应用 clientId |
74
+ | clientSecret | string | 应用 clientSecret |
75
+ | namespace | string | 命名空间 |
76
+ | disableTokenCache | boolean | 是否禁用 token 缓存,默认 false |
77
+
78
+ ***
79
+
80
+ <br>
81
+
82
+ ## **📝 日志等级**
83
+
84
+ 可调用 setLoggerLevel(level) 设置日志等级。
85
+
86
+ | **Level** | **名称** | **说明** |
87
+ | :-- | :-- | :-- |
88
+ | 0 | fatal | 严重错误 |
89
+ | 1 | error | 错误 |
90
+ | 2 | warn | 警告 |
91
+ | 3 | info | 信息(默认) |
92
+ | 4 | debug | 调试信息 |
93
+ | 5 | trace | 追踪 |
94
+
95
+ ***
96
+
97
+ <br>
98
+
99
+ ## **🔍 查询接口**
100
+
101
+ 查询条件请根据实际需求自行拼装。详情参考 API 接口文档示例。
102
+
103
+ ### **单条查询**
104
+
105
+ ```JavaScript
106
+ const res = await client.object.search.record({
107
+ object_name: 'object_store',
108
+ record_id: 'your_record_id',
109
+ select: ['field1', 'field2']
110
+ });
111
+ console.log(res);
112
+ ```
113
+
114
+ ***
115
+
116
+ ### **批量查询**
117
+
118
+ 每次查询最多返回 100 条记录。
119
+
120
+ ```JavaScript
121
+ const res = await client.object.search.records({
122
+ object_name: 'object_store',
123
+ data: {
124
+ need_total_count: true,
125
+ page_size: 100,
126
+ offset: 0
127
+ }
128
+ });
129
+ console.log(res);
130
+ ```
131
+
132
+ ***
133
+
134
+ ### **分页查询所有记录**
135
+
136
+ 在上一个请求的基础上,封装每次查询最多返回 100 条记录。
137
+
138
+ ```JavaScript
139
+ const { total, items } = await client.object.search.recordsWithIterator({
140
+ object_name: 'object_store',
141
+ data: {
142
+ need_total_count: true,
143
+ page_size: 100,
144
+ offset: 0
145
+ }
146
+ });
147
+
148
+ console.log('Total:', total);
149
+ console.log('Items:', items);
150
+ ```
151
+
152
+ ***
153
+
154
+ <br>
155
+
156
+
157
+ ***
158
+
159
+ ## **➕ 创建接口**
160
+
161
+ ### **单条创建**
162
+
163
+ ```JavaScript
164
+ const res = await client.object.create.record({
165
+ object_name: 'object_event_log',
166
+ record: {
167
+ name: 'Sample text',
168
+ content: 'Sample text'
169
+ }
170
+ });
171
+ console.log(res);
172
+ ```
173
+
174
+ ### **批量创建**
175
+
176
+ > ⚠️ 每次最多创建 100 条,SDK 已自动分组限流
177
+
178
+ ```JavaScript
179
+ const { total, items } = await client.object.create.recordsWithIterator({
180
+ object_name: 'object_event_log',
181
+ records: [
182
+ { name: 'Sample text 1', content: 'Sample text 1' },
183
+ { name: 'Sample text 2', content: 'Sample text 2' }
184
+ ]
185
+ });
186
+ console.log('Total:', total);
187
+ console.log('Items:', items);
188
+ ```
189
+
190
+
191
+ <br>
192
+ ## **✏️ 更新接口**
193
+
194
+ ### **单条更新**
195
+
196
+ ```JavaScript
197
+ const res = await client.object.update.record({
198
+ object_name: 'object_store',
199
+ record_id: 'your_record_id',
200
+ record: { field1: 'newValue' }
201
+ });
202
+ console.log(res);
203
+ ```
204
+
205
+ ***
206
+
207
+ ### **批量更新**
208
+
209
+ > ⚠️ 每次最多更新 100 条,SDK 已自动分组限流
210
+
211
+ ```JavaScript
212
+ const res = await client.object.update.recordsBatchUpdate({
213
+ object_name: 'object_store',
214
+ records: [
215
+ { _id: 'id1', field1: 'value1' },
216
+ { _id: 'id2', field1: 'value2' }
217
+ ]
218
+ });
219
+ console.log(res);
220
+ ```
221
+
222
+ ***
223
+
224
+ <br>
225
+
226
+ ## **🗑️ 删除接口**
227
+
228
+ ### **单条删除**
229
+
230
+ ```JavaScript
231
+ const res = await client.object.delete.record({
232
+ object_name: 'object_store',
233
+ record_id: 'your_record_id'
234
+ });
235
+ console.log(res);
236
+ ```
237
+
238
+ ***
239
+
240
+ ### **批量删除**
241
+
242
+ > ⚠️ 每次最多删除 100 条,SDK 已自动分组限流
243
+
244
+ ```JavaScript
245
+ const res = await client.object.delete.recordsBatchDelete({
246
+ object_name: 'object_store',
247
+ ids: ['id1', 'id2', 'id3']
248
+ });
249
+ console.log(res);
250
+ ```
251
+
252
+ ***
253
+
254
+ ## **🛠️ 高级**
255
+
256
+ ### **获取当前** **token**
257
+
258
+ ```JavaScript
259
+ console.log(client.token);
260
+ ```
261
+
262
+ ### **获取当前 namespace**
263
+
264
+ ```JavaScript
265
+ console.log(client.currentNamespace);
266
+ ```
267
+
268
+ ***
269
+
270
+ <br>
271
+
272
+ ## **💡 备注**
273
+
274
+ - 本 SDK 默认使用 [axios](https://www.npmjs.com/package/axios) 请求。
275
+
276
+ - 内置 [bottleneck](https://www.npmjs.com/package/bottleneck) 进行请求限流。
277
+
278
+ - 日志打印默认使用 console.log 并带时间戳,可通过 setLoggerLevel 动态控制输出等级。
279
+
280
+
281
+ ***
282
+
283
+ <br>
284
+
285
+ <br>
286
+
287
+ > 由 [aPaaS OAPI Client SDK](https://www.npmjs.com/package/apaas-oapi-client) 提供支持,如有问题请提交 Issue 反馈。
288
+
289
+ <br>
290
+ ***
291
+
292
+ ## **📊 对象元数据接口**
293
+
294
+ ### **获取指定对象字段元数据**
295
+
296
+ ```JavaScript
297
+ const res = await client.object.metadata.field({
298
+ object_name: '_user',
299
+ field_name: '_id'
300
+ });
301
+ console.log(res);
302
+ ```
303
+
304
+ ### **获取指定对象所有字段信息**
305
+
306
+ ```JavaScript
307
+ const res = await client.object.metadata.fields({
308
+ object_name: 'object_store'
309
+ });
310
+ console.log(res);
311
+ ```
312
+
313
+ ***
314
+
315
+ ## **🏢 部门 ID 交换**
316
+
317
+ ### **单个部门 ID 交换**
318
+
319
+ ```JavaScript
320
+ const res = await client.department.exchange({
321
+ department_id_type: 'external_department_id',
322
+ department_id: 'Y806608904'
323
+ });
324
+ console.log(res);
325
+ ```
326
+
327
+ ### **批量部门 ID 交换**
328
+
329
+ 每次最多 100 个,SDK 已自动拆分限流。
330
+
331
+ ```JavaScript
332
+ const res = await client.department.batchExchange({
333
+ department_id_type: 'external_department_id',
334
+ department_ids: ['id1', 'id2', 'id3']
335
+ });
336
+ console.log(res);
337
+ ```
338
+
339
+ ***
340
+
341
+ ## **☁️ 云函数调用**
342
+
343
+ ```JavaScript
344
+ const res = await client.function.invoke({
345
+ name: 'StoreMemberUpdate',
346
+ params: { key: 'value' }
347
+ });
348
+ console.log(res);
349
+ ```
350
+
351
+ ---
package/dist/index.d.ts CHANGED
@@ -73,6 +73,25 @@ declare class Client {
73
73
  * 对象模块
74
74
  */
75
75
  object: {
76
+ metadata: {
77
+ /**
78
+ * 获取指定对象下指定字段的元数据
79
+ * @param params 请求参数 { object_name, field_name }
80
+ * @returns 接口返回结果
81
+ */
82
+ field: (params: {
83
+ object_name: string;
84
+ field_name: string;
85
+ }) => Promise<any>;
86
+ /**
87
+ * 获取指定对象的所有字段信息
88
+ * @param params 请求参数 { object_name }
89
+ * @returns 接口返回结果
90
+ */
91
+ fields: (params: {
92
+ object_name: string;
93
+ }) => Promise<any>;
94
+ };
76
95
  search: {
77
96
  /**
78
97
  * 单条记录查询
@@ -100,6 +119,38 @@ declare class Client {
100
119
  items: any[];
101
120
  }>;
102
121
  };
122
+ create: {
123
+ /**
124
+ * 单条记录创建
125
+ * @param params 请求参数 { object_name, record }
126
+ * @returns 接口返回结果
127
+ */
128
+ record: (params: {
129
+ object_name: string;
130
+ record: any;
131
+ }) => Promise<any>;
132
+ /**
133
+ * 批量创建记录
134
+ * @param params 请求参数 { object_name, records }
135
+ * @returns 接口返回结果
136
+ */
137
+ records: (params: {
138
+ object_name: string;
139
+ records: any[];
140
+ }) => Promise<any>;
141
+ /**
142
+ * 分批创建所有记录
143
+ * @param params 请求参数 { object_name, records }
144
+ * @returns { total, items }
145
+ */
146
+ recordsWithIterator: (params: {
147
+ object_name: string;
148
+ records: any[];
149
+ }) => Promise<{
150
+ total: number;
151
+ items: any[];
152
+ }>;
153
+ };
103
154
  update: {
104
155
  /**
105
156
  * 单条更新
@@ -142,6 +193,43 @@ declare class Client {
142
193
  }) => Promise<any[]>;
143
194
  };
144
195
  };
196
+ /**
197
+ * 部门 ID 交换模块
198
+ */
199
+ department: {
200
+ /**
201
+ * 单个部门 ID 交换
202
+ * @param params 请求参数
203
+ * @returns 单个部门映射结果
204
+ */
205
+ exchange: (params: {
206
+ department_id_type: "department_id" | "external_department_id" | "external_open_department_id";
207
+ department_id: string;
208
+ }) => Promise<any>;
209
+ /**
210
+ * 批量部门 ID 交换
211
+ * @param params 请求参数
212
+ * @returns 所有子请求的返回结果数组
213
+ */
214
+ batchExchange: (params: {
215
+ department_id_type: "department_id" | "external_department_id" | "external_open_department_id";
216
+ department_ids: string[];
217
+ }) => Promise<any[]>;
218
+ };
219
+ /**
220
+ * 云函数模块
221
+ */
222
+ function: {
223
+ /**
224
+ * 调用云函数
225
+ * @param params 请求参数 { name: string; params: any }
226
+ * @returns 接口返回结果
227
+ */
228
+ invoke: (params: {
229
+ name: string;
230
+ params: any;
231
+ }) => Promise<any>;
232
+ };
145
233
  }
146
234
  export declare const apaas: {
147
235
  Client: typeof Client;