【获奖名单公布】yapi-to-all 接口文档驱动开发
1.组件库;
2.帮助前端做状态管理的工具;
3.开源库的一些现成解决方案;
4.项目代码封装过的可复用逻辑。
关于与各端对接同学输入则是:
1.与产品经理沟通确认的业务需求;
2.与设计同学沟通确认的用户界面设计;
3.与后端同学沟通确认的接口实现方式;
4.测试同学提出的 bug。
function frontendDevelopment(
{
componentLibrary,
stateManagementLibrary,
otherOpenSourceLibrary,
businessCode,
...
},
{ requireMent, ui, yapi, bug, ... },
) {
// ...
return logicCode;
}
我们拿到需求文档,与产品以及设计同学选定我们本次需求需要消费的组件,与后端同学确定我们的接口定义。首先我们根据接口文档定义请求方法,以及 ts 类型。然后用我们的状态管理库结合请求方法,完成状态变更方法的编写,然后将方法和状态传入对应的页面,在业务组件库以及基础组件库里选择以及组合组件组合完成业务场景代码的编写,在页面内对应的组件消费我们之前定义的方法完成本次需求的开发。
这个高度重复的编码流程完全可以抽象出来,用代码生成的方式完成各个环节的组合和关联。
下面我们将先优化以及选择我们消费的物料,然后再组织优化整理后的物料,完成开发流程的整理和抽象。
提供了一致的 UI组件和设计模式,确保应用程序的一致性和标准化;
维护和更新应用程序变得更加便捷,只需在组件库中进行修改即可影响整个应用程序;
促进了设计师、开发人员和产品经理之间的跨团队协作和沟通;
使用经过优化的组件提升了用户界面的质量和用户体验;
具有可扩展性和定制性,可根据项目需求进行定制和扩展。
对于请求状态处理,我们选择 useRequest hook
ahooks 库中的 useRequest 方法是一个非常实用的 hook,可以帮助我们更加便捷地进行数据请求和状态管理。它的主要好处包括:
简化了数据请求的代码结构,让代码更加清晰易懂;
支持缓存机制,可以在数据请求时缓存数据,从而避免重复请求;
支持请求结果转换、异常处理等功能,可以有效提高代码质量和可维护性。
useRequest 方法的主要功能包括:
请求数据:可以通过 useRequest 方法来请求数据;
缓存数据:支持缓存机制,可以在数据请求时缓存数据,从而避免重复请求;
转换数据:支持请求结果转换功能,可以将请求结果转换为指定格式;
处理异常:支持异常处理功能,可以在请求过程中捕获异常并进行相应的处理;
取消请求:支持取消请求的功能,可以在请求过程中取消请求;
状态管理:支持状态管理功能,可以管理请求状态、请求结果等信息。
关于请求模块,我们选择 umi-request:现成方案;以及经过改造过的适用于小程序的请求方案
主要好处:
避免手写重复的请求和错误处理逻辑,提高代码复用和可维护性,同时也可以提高请求和响应数据的处理效率和质量。还具有灵活的配置和扩展性,可以根据自己的需求来进行定制和扩展,满足不同场景下的请求和响应处理需求。主要功能:
支持拦截器:可以在请求前和响应后拦截请求,改变请求和响应的参数和结果;
支持全局错误处理:可以在全局配置中设置错误处理函数,统一处理发生错误的请求;
支持终止请求:可以通过 cancelToken 终止正在请求的请求;
支持超时处理:可以设置请求超时时间,避免请求时间过长;
支持请求缓存:可以设置请求缓存时间,避免重复请求;
支持请求重试:可以设置请求重试次数和时间间隔,避免请求失败;
支持多种数据格式:可以发送和接收多种数据格式,如 JSON、FormData、ArrayBuffer 等;
支持上传和下载文件:可以上传和下载文件,支持进度条显示;
支持请求和响应的拦截器:可以在请求和响应拦截器中修改请求和响应数据,如添加请求头、处理响应数据等;
支持自定义请求和响应的处理逻辑:可以通过自定义处理逻辑来处理请求和响应数据;
支持请求和响应的转换器:可以在请求和响应转换器中对请求和响应数据进行转换;
支持扩展请求库:可以通过扩展请求库来实现更多的功能,如添加一些常用的请求头、修改默认配置等。
众所周知,组件是业务提效以及业务线基建的重中之重,我们通常遇到的会有以下几种:
选择的基础组件
业务组件
通用的业务场景(基础组件和业务组件组合的产物)
我们通过通用业务场景的方式,完成组件之间的关联,形成场景模版池;再进一步通过关联我们约定的接口定义将接口和场景模版代码关联在一起。
我们将 useRequest 和 service 定义整合在一起,每次定义一个请求的方法,这个方法就会挂一个 useRequest hook 整合了请求的状态,这样我们不需要像之前需要分别定义再做传参调用,而是直接内聚在一起,让业务同学根据场景决定是否使用。完成了请求方法和状态定义的聚合。
我们将每一个请求的参数以及返回值的 ts 定义都聚合在一个 type 上,而且也做了平铺处理,这样所有请求方法的 ts 定义在都在同一级可以直接获取到,没有嵌套也让类型的消费更简单。参数类型名为 ServiceTypes[methodName + ‘Params’], 返回值类型名为 ServiceTypes[methodName + ‘Response’] ,使用上,只要引入对应页面的 ServiceTypes 文件名,就可以直接消费对应方法的定义。
配置文件
目录:路由关联 service 对应的 service, 这里请求相关的配置都在页面路径下的 generateServices 里,这样就会在对应的页面路径下生成一个 service 文件。如下所示,每一个路径都关联了一个 generateServices 的数组属性,这种关联确保了具体页面需要消费的接口生成在对应的页面。做到页面代码与请求代码的内聚。
我们可以通过 template 去选择我们的业务场景,如果是有约定固定消费数据格式的 template,还可以直接帮助我们完成接口和页面的关联。
如果不加 template 参数,不生成模版代码,只生成请求函数,请求状态,类型定义:
生成的抽屉提交表单页代码
我们在对应页面的任何地方,在需要时不论时发出请求还是引用 ts 类型,都可以直接引用一个聚合变量,便捷消费。
下面是设计图:
我们的配置文件,是在路由里新增生成示的 generateService 字段,在里面配置接口地址,以及需要消费的模版名,以及格式化的函数去转换接口文档提供给我们的请求返回参数。
根据这些配置信息,再根据对应是后台还是微信小程序选择消费我们的组件库对应的 demo 模版,以及对应的请求模块完成我们的业务代码:请求函数,状态管理,ts 定义,视图页面。最后按照团队代码风格的注入方式和顺序完成业务的开发。
下面是流程图:
10
未来
增加插件方便业务线拓展; 分析 lanhu 的结构自动关联业务组件或基础组件; 接入 ai 辅助我们的代码分析和代码生成示工作。 上期获奖名单公布 恭喜三位读者!
@kl♓️ @羽夜 @阿策~
以上读者请及时添加小编微信@sohu-tech20 兑换获奖书籍~
兑奖截止至8月24日,请参与读者及时兑奖