retrofit.ts
    TypeScript icon, indicating that this package has built-in type declarations

    1.1.3 • Public • Published

    Retrofit.ts

    基于注解实现的HTTP请求库,可作为Java的[Retrofit]库的(https://github.com/square/retrofit)的TypeScript版本的实现

    使用者指南

    目前只支持TypeScript环境

    npm i retrofit.ts --save

    使用示例

    import { Retrofit, ReftrofitResponse BaseUrl, GET, Query, Path, POST, Body, Header, Head, Headers } from 'Retrofit.js';
     
    @BaseUrl('/user')
    class Person {
      @GET('/getUser/:user.id')
      getUser(@Path('user') user): Promise<ReftrofitResponse> { }
     
      @POST('/addUser')
      addUser(@Body('username') username): Promise<ReftrofitResponse>  { }
     
      @POST('/login')
      login(@Header('cookie') cookie): Promise<ReftrofitResponse>  { }
    }
     
    let retrofit = new Retrofit.Builder()
      .setBaseUrl('http://localhost:3007')
      .build();
      
    // 发起请求
    let call = retrofit.create<Person>(Person);
    call.getUser({
      id: 1
    }).then(() => {
     
    }).catch(() => {
     
    })
    ```js
    ## 拦截器
    - 实现Interceptor接口的handler方法即可
    - 分为请求拦截器和响应拦截器
    - 请求拦截器中,handler的参数和返回值为RequestConfig, 响应拦截器为ReftrofitResponse
    - handler方法如果不返回话,会终止后续拦截器的执行
    ```javaScript
    class LoggerInterceptor implements Interceptor {
      handler(context: RequestConfig): RequestConfig {
        let header = '';
        if (context.headers) {
          const headerKeys: string[] = Object.keys(context.headers);
          if (headerKeys.length > 0) {
            headerKeys.forEach((key: string) => {
              header = header.concat(` -H '${key}${context.headers[key]}'`);
            });
          }
        }
        console.log('config  ', context);
        console.log(`curl -X ${context.method}  '${context.baseURL}${context.url}'  ${header}`);
        return context;
      }
    }
    let retrofit = new Retrofit.Builder()
      .baseUrl('http://localhost:3007')
      .addReqInterceptor(new LoggerInterceptor())
      .build();

    异常处理

    可在构建Retrofit时,进行全局异常处理

    let retrofit = new Retrofit.Builder()
      .setBaseUrl('http://localhost:3007')
      .setErrorHandler((error) => {
          // error
      })
      .build();

    请求取消

    const fetch = call.getUser({
        id: '123',
    }, 'king');
     
    setTimeout(() => {
        fetch.cancel();
    }, 2000)

    ⭐️ 目前支持的注解

    方法层级

    • GET (path: string)
    • POST (path: string)
    • PUT (path: string)
    • Del (path: string)
    • HEAD (path: string)
    • PATCH (path: string)
    • Path (key: string)
    • Query (key: string)
    • Header (key: string) // 定义某个请求的header
    • Head (key: string) // 为某个请求的header填充

    class层级

    • BaseUrl (path: string)
    • Headers (header: string[])

    Install

    npm i retrofit.ts

    DownloadsWeekly Downloads

    0

    Version

    1.1.3

    License

    ISC

    Unpacked Size

    27.1 kB

    Total Files

    11

    Last publish

    Collaborators

    • zenotsai