使用 typed-rest-client 进行 REST API 调用

2024-09-25 07:51:12 浏览数 (2)

typed-rest-client 是一个用于 Node.js 的库,它提供了一种类型安全的方式来与 RESTful API 进行交互。其主要功能包括:

安装 typed-rest-client

要使用 typed-rest-client,首先需要安装它,可以通过 npm 来安装:

代码语言:javascript复制
$ npm install typed-rest-client

使用 typed-rest-client

这里假定有个 express 的 server 提供了两个 REST API,一个是获取用户列表,一个是获取用户信息。

index.ts

代码语言:javascript复制
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

代码语言:javascript复制
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 返回使用的数据结构。
  • 调用 RestClientget 方法,传入 URL 和返回的数据类型,返回一个 IRestResponse 对象,IRestResponse 对象包含了 HTTP 响应的状态码、响应头和响应体。
  • 通过 statusCode 属性可以获取到 HTTP 响应的状态码。
  • 通过 headers 属性可以获取到 HTTP 响应头。
  • 通过 result 属性可以获取到响应体中的数据。

测试

首先启动express server。

代码语言:javascript复制
$ npm run dev

运行测试程序

代码语言:javascript复制
$ 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

0 人点赞