博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AI 考拉技术分享会--API 接口与 Typescript Interface
阅读量:5874 次
发布时间:2019-06-19

本文共 1956 字,大约阅读时间需要 6 分钟。

hot3.png

赶在祖国生日放假前,考拉Dev team的成员进行了小范围的技术分享会,Nick格格分享了自己在工作中踩过的一些坑以及填坑大法。希望大家也能避开bug,修得node大法!

前言

Interface 就是接口,在 typescript 用于类型限定。

在 Node 项目中,我们常用 apidoc 来定义接口文档。
那么,他们俩是否能结合起来呢?

一、apidoc 的痛点

Inline Documentation for RESTful web APIs,使用起来非常方便,直接在 api 上添加注释,就可以生成可视化的文档。

但是,在实际业务中,我们有些接口比较复杂,定义返回值是一件比较痛苦的事情,如图: 微信图片编辑_20181018162237.jpg
而且,过了一段时间之后,出于惰性,开发人员会放弃更新 API 文档,导致文档落后于实际。

二、API Interface

(一)API 未定义的问题

在 js 项目中,api 返回结构一般是无法清晰地看出来的,你得跑一下接口,才知道会返回什么,或者仔细看一遍代码。这种情况下,开发人员维护 API 会面临以下问题:

  • 文档缺失:接口文档缺少对某个字段的定义,不知道该字段作何用处;
  • 字段混乱:明明是一个字段,可能在 接口 A 是叫 amount, 在接口 B 却叫 number;
  • 重复定义:多个接口中都用到一个叫 Banner 的东西,需要在每个接口文档中定义一遍,稍有改动,需要更改多处。

(二)使用 interface 的好处

所以可以尝试使用 typescript 的 interface 来定义 API 的返回值结构,一个接口对应一个 interface。

P2.png
假设一个 api 是 product info ,定义结构如下:

/** * 产品明细 */export interface IProductInfo {  /**   * 基础利息   */  baseRate: number  /**   * 加息   */  bonusRate: number  /**   * 加息提示   */  bonusRateStr: string}

另一个 api 是 product list ,可以很方便地进行复用:

/** * 产品列表 */export interface IProductList {  list: Array
}

这些接口定义也可以共享给前端(前端也用 typescript 的话)

(三)apidoc + interface

很多时候,你的痛点其实也是其他人的痛点,所以就有了开源项目,通过搜寻,我们可以找到一个 apidoc 的插件 ,这个插件可以根据 interface 的定义帮你生成 apidoc 需要的 @apiSuccess 内容。

定义一个接口:

filename: ./employers.tsexport interface Employer {  /**   * Employer job title   */  jobTitle: string;  /**   * Employer personal details   */  personalDetails: {    name: string;    age: number;  }}

引入 interface:

@apiInterface (./employers.ts) {Person}

翻译的效果:

@apiSuccess {String} jobTitle Job title   @apiSuccess {Object} personalDetails Empoyer personal details   @apiSuccess {String} personalDetails.name   @apiSuccess {Number} personalDetails.age

还支持数组结构定义呢~

有了这个插件,就可以通过维护 interface 来维护 apidoc 了。

三、注意

该插件不支持匿名接口定义数组结构, 如下:

export interface IProductList { list: Array<{   a: string,   b: string }>}

AST 解析代码的时候会拿不到某些属性,会报错。

著作权归本文作者所有,未经授权,请勿转载,谢谢。


写在最后的 今天是属于大家的 1024 节,在今天这个值得庆祝的日子,祝大家节日快乐,向程序猿致敬,向加班 SAY NO !

著作权归本文作者所有,未经授权,请勿转载,谢谢。

转载于:https://my.oschina.net/kalengo/blog/2251965

你可能感兴趣的文章
arm linux嵌入式开发入门与进阶---开发板推荐
查看>>
解决Window7x64安装IE10无法运行的问题
查看>>
做socket保持长连接的一些心得
查看>>
Lumia 800 7.10.8858.136
查看>>
The disk cannot be added to Cluster Shared Volumes because it does not have any suitable partitions
查看>>
C#: 鼠标和键盘的输入事件
查看>>
Google Code 创建开源项目
查看>>
Script:收集数据库中用户的角色和表空间等信息
查看>>
Java连接MySql
查看>>
gdb调试命令
查看>>
ASP.NET 网站部署 Part.1(安装IIS、复制文件部署网站)
查看>>
怎样才能当上项目经理?(转)
查看>>
消息、接收-关于Erlang Socket的三种消息接收模式-by小雨
查看>>
文件配置IBM Ration Rhapsody 软件的环境配置
查看>>
蛇形填数
查看>>
PostgreSQL在何处处理 sql查询之五十九
查看>>
T-SQL查询进阶--深入浅出视图
查看>>
iOS 如何创建单例对象
查看>>
skype msnLite 静态路由
查看>>
Hibernate原理
查看>>