typed-rest-client
是一个用于 Node.js 的库,它提供了一种类型安全的方式来与 RESTful API 进行交互。其主要功能包括:
安装 typed-rest-client
要使用 typed-rest-client
,首先需要安装它,可以通过 npm 来安装:
$ npm install typed-rest-client
使用 typed-rest-client
这里假定有个 express 的 server 提供了两个 REST API,一个是获取用户列表,一个是获取用户信息。
index.ts
import express, { Express, Request, Response } from "express";
const app: Express = express();
const port = process.env.PORT || 3000;
app.get("/", (req: Request, res: Response) => {
res.send("Express + TypeScript Server");
});
app.get("/users", (req: Request, res: Response) => {
const users = [
{
name: 'kongxx',
password: 'password',
email: 'kongxx@example.com'
},
{
name: 'Mandy',
password: 'password',
email: 'mandy@example.com'
}
]
res.json(users);
});
app.get("/users/:id", (req: Request, res: Response) => {
const user = {
name: 'kongxx',
password: 'password',
email: 'kongxx@example.com'
}
res.json(user);
});
app.listen(port, () => {
console.log(`[server]: Server is running at http://localhost:${port}`);
});
下面是测试程序
test.ts
import {RestClient, IRestResponse} from 'typed-rest-client/RestClient';
interface User {
name: string;
password: string;
email: string;
}
async function test() {
const rc: RestClient = new RestClient('test', 'http://localhost:3000');
const resUsers: IRestResponse<User[]> = await rc.get<User[]>('/users');
console.log('get users ...');
console.log('response: ', resUsers);
console.log('statusCode: ', resUsers.statusCode);
console.log('name: ', resUsers.result[0]?.name);
console.log('email: ', resUsers.result[0]?.email);
const resUser: IRestResponse<User> = await rc.get<User>('/users/1');
console.log('get user ...');
console.log('response: ', resUser);
console.log('statusCode: ', resUser.statusCode);
console.log('name: ', resUser.result?.name);
console.log('email: ', resUser.result?.email);
}
test();
- 这里首先定义了一个 interface,描述了 REST API 返回使用的数据结构。
- 调用
RestClient
的get
方法,传入 URL 和返回的数据类型,返回一个IRestResponse
对象,IRestResponse
对象包含了 HTTP 响应的状态码、响应头和响应体。 - 通过
statusCode
属性可以获取到 HTTP 响应的状态码。 - 通过
headers
属性可以获取到 HTTP 响应头。 - 通过
result
属性可以获取到响应体中的数据。
测试
首先启动express server。
$ npm run dev
运行测试程序
$ npm install -g typescript
$ tsc src/test.ts && node src/test.js
get users ...
response: {
statusCode: 200,
result: [
{
name: 'kongxx',
password: 'password',
email: 'kongxx@example.com'
},
{
name: 'Mandy',
password: 'password',
email: 'mandy@example.com'
}
],
headers: {
'x-powered-by': 'Express',
'content-type': 'application/json; charset=utf-8',
'content-length': '137',
etag: 'W/"89-50ejbxheoPkdk58Nm75VjrVs3YE"',
date: 'Mon, 23 Sep 2024 01:01:04 GMT',
connection: 'close'
}
}
statusCode: 200
name: kongxx
email: kongxx@example.com
get user ...
response: {
statusCode: 200,
result: { name: 'kongxx', password: 'password', email: 'kongxx@example.com' },
headers: {
'x-powered-by': 'Express',
'content-type': 'application/json; charset=utf-8',
'content-length': '68',
etag: 'W/"44-WML8FV1wUhoW//8kQuCB8B/FWaQ"',
date: 'Mon, 23 Sep 2024 01:01:04 GMT',
connection: 'close'
}
}
statusCode: 200
name: kongxx
email: kongxx@example.com