做接口定义核心是业务与管理, 清楚的业务与核心管理方式, 才能清楚定义出标准接口. 对于实现技术, 只需要了解即可, 知道实现技术的根本差别就可以了. 比如: web service 接口 与 restful风格接口, 差别在几点: 1, restful 参数是文本, web service 参数也可以是文本, 这一点两种技术不冲突. 2, web service 可以是实体对象, restful 没有这种方式. 3, web service 依赖专用框架, restful 依赖公用框架 4, web service 接口 与 restful 可以做到互通 没有影响.因此 公司定义出接口, 应当是达到几点: 1, 没有系统平台限制 2, 没有技术实现限制 3, 简单, 并且可读性好.定义文档出来之后, 用 web service 还是用 restful又有什么影响? 完全没有影响, 想用什么技术就用什么技术实现!! 依赖框架只有一个结果: 把自己框死.
微信支付接口: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
对外API接口: 它就是公司对别人的承诺, 永远不要要求对方改变调用参数, 你可以扩展内容, 但你不能让以前的实现不能使用.所以最灵活的API接口就是: 象java 的main方法一样永远不会改变, 但每个人使用时参数都不一样.微信, 支付宝, 他们的接口也就是 20来个方法, 他每一个接口都很灵活.
我发现他们有一个特点: 参数只有一个文本, 文本的内容可以是XML, 也可以是JOSN字符, 可以无限扩展参数, 但是接口定义永远不需要改变!!
* 作用:统一下单<br>
* 场景:公共号支付、扫码支付、APP支付
* @param reqData 向wxpay post的请求数据
* @return API返回数据
* @throws Exception
*/
public String unifiedOrder(String reqData) throws Exception ;
public String insertData(String reqData) throws Exception ;//查询数据
public String queryData(String reqData) throws Exception ;//删除数据
public String deleteData(String reqData) throws Exception ;//修改数据
public String updateData(String reqData) throws Exception ;以后都是云时代, 参数越简单才越通用.
public String unifiedOrder(String reqData) throws Exception ;
还是用
public Map<String, String> unifiedOrder(Map<String, String> reqData) throws Exception ;
你作为接口定义人, 肯定要对 reqData进行定义.比如, 查询订单接口参数:
<xml>
<appid>wx2421b1c4370ec43b</appid>
<mch_id>10000100</mch_id>
<nonce_str>ec2316275641faa3aacf3cc599e8730f</nonce_str>
<transaction_id>1008450740201411110005820873</transaction_id>
<sign>FDD167FAA73459FD921B144BAF4F4CA2</sign>
</xml>XML里面的内容是有严格说明的:
应用APPID appid 是 String(32) wxd678efh567hg6787 微信开放平台审核通过的应用APPID
商户号 mch_id 是 String(32) 1230000109 微信支付分配的商户号
微信订单号 transaction_id 是, String(32) 1009660380201506130728806387 微信的订单号,优先使用这就是规范.
对内和对外的取舍不一样,对外的接口自然越少越好,减少开发者学习成本,比如微信支付宝这种
对内的话,多个接口可以隔离逻辑,多个URL是利用框架层面的路由,你在参数中设置类型,那是你自己写代码路由,这其实也算一种逻辑重复,美团下单的参数自然跟共享单车下单的参数可能完全不一样,参数反序列化部分也与框架提供的功能重叠
简单来说你的下单接口分担了框架的职责(反序列化和路由),这与其他接口的风格略有不一致当然我说的是缺点,那自然也有优点,优点就不多说了
必然存在前端要调用多次后端接口的情况。我们的实现方式:
前端包括2块:纯前端(H5)+nodejs网关层(也算服务端,只是前端在维护)
后端提供基础数据的完整接口网关层调用n个后端接口,把数据做简单组合,一次性返回给前端。
一定要避免前端调n个后端接口,弱网会哭的。
真正的不变的东西是业务与管理. 接口是定义业务与管理, 不是根据网上的各种框架来适应.
中国人开发软件都喜欢搞什么 框架 现在国内除了几个大电商, 所有做软件的公司 基本都是倒闭状态.
国内公司没有核心, 都喜欢依赖国外的东西.
以前大家都搞 soap web service, 现在又搞 restful, 其实都只是技术实现 与接口定义没有毛关系.
对于实现技术, 只需要了解即可, 知道实现技术的根本差别就可以了.
比如: web service 接口 与 restful风格接口, 差别在几点:
1, restful 参数是文本, web service 参数也可以是文本, 这一点两种技术不冲突.
2, web service 可以是实体对象, restful 没有这种方式.
3, web service 依赖专用框架, restful 依赖公用框架
4, web service 接口 与 restful 可以做到互通 没有影响.因此 公司定义出接口, 应当是达到几点:
1, 没有系统平台限制
2, 没有技术实现限制
3, 简单, 并且可读性好.定义文档出来之后, 用 web service 还是用 restful又有什么影响? 完全没有影响, 想用什么技术就用什么技术实现!!
依赖框架只有一个结果: 把自己框死.
至于用什么技术实现, 公司什么产品就用什么技术, 每个产品技术都有点不同. 但是接口都是一份.
我们有 5-8套系统, 这些系统之前都要是交互的, 有些用java做的, 有些用c++写的, 有些用.net写的. 如果按技术去定义接口那不完了?
虽然中间也有反复修改, 都修改了文档再开发代码.
国内有几家公司可以做到: 先写文档再开发程序?