首页 » Web前端 » php单向石友api技巧_若何处理好前后端分离的 API 问题

php单向石友api技巧_若何处理好前后端分离的 API 问题

访客 2024-12-13 0

扫一扫用手机浏览

文章目录 [+]

由于交付周期的缘故原由,接入了一个第三方的库,碰着了这么一些问题:文档老旧,并且不足全面。
这个问题比较于没有文档来说,愈加的恐怖。
我们须要的接口不在文档上,文档上的接口不存在库里,又或者是少了一行关键的代码。

对付一个库来说,文档是多种多样的:一份 demo、一个入门指南、一个 API 列表,还有一个测试。
如果一个 API 有测试,那么它也相称于有一份大略的文档了——如果我们可以看到测试代码的话。
而当一个库没有文档的时候,它也不会有测试。

php单向石友api技巧_若何处理好前后端分离的 API 问题

在前后端分离的项目里,API 也是这样一个烦人的存在。
我们就常常碰着各种各样的问题:

php单向石友api技巧_若何处理好前后端分离的 API 问题
(图片来自网络侵删)

API 的字段更新了

API 的路由更新了

API 返回了未预期的值

API 返回由于某种缘故原由被删除了




API 的掩护是一件烦人的事,以是最好能一次设计好 API。
可是这是不可能的,API 在其的生命周期里,该当是要不断地演进的。
它与精益创业的思想是相似的,当一个 API 不得当现有场景时,该当对这个 API 进行更新,以知足需求。
也因此,API 本身是面向变革的,问题是这种变革是双向的、单向的、联动的?还是静默的?

API 设计是一个非常大的话题,这里我们只谈论:演进、设计及掩护。

前后端分离 API 的演进史

刚毕业的时候,事情的紧张内容是用 Java 写网站后台,业余写写自己喜好的前端代码。
逐步的,随着各个公司的 Mobile First 计策的履行,项目上的紧张措辞变成了 JavaScript。
项目开始履行了前后端分离,团队也变成了全功能团队,前端、后台、DevOps 变成了每个人须要提高的技能。
于是如我们所见,当我们完成一个任务卡的时候,我们须要自己完成后台 API,还要编写相应的前端代码。

只管当时的手机浏览器性能,已经有相称大的改进,但是仍旧会存在明显的卡顿。
因此,我们在设计的时候,尽可能地便将逻辑移到了后台,以减少对付前端带来的压力。
可性能问题在本日看来,差异已经没有那么明显了。

犹如我在《RePractise:前端演进史》中所说,前端领域及 Mobile First 的变革,引起了后台及 API 架构的一系列演进。

最初的时候,我们只有一个网站,没有 REST API。
后台直接供应 Model 数据给前端模板,模板处理完后就展示了干系的数据。

当我们开始须要 API 的时候,我们就会采取最大略、直接的办法,直接在原有的系统里开一个 API 接口出来。

为了不毁坏现有系统的架构,同时为了更快的上线,直接开出一个接口来得最为直接。
我们一贯在这样的模式下事情,直到有一天我们就会创造,我们碰着了一些问题:

API 消费者:一个接口无法同时知足不同场景的业务。
如移动运用,可能与桌面、手机 Web 的需求不一样,导致接口存在差异。

API 生产者:对接多个不同的 API 需求,产生了各种各样的问题。

于是,这时候就须要 BFF(backend for frontend)这种架构。
后台可以供应所有的 MODEL 给这一层接口,而 API 消费者则可以按自己的须要去封装。

API 消费者可以连续利用 JavaScript 去编写 API 适配器。
后台则逐步的由于须要,拆解成一系列的微做事。

系统由内部的类调用,拆解为基于 RESTful API 的调用。
后台 API 生产者与前端 API 消费者,已经区分不出谁才是真正的开拓者。

瀑布式开拓的 API 设计

说实话,API 开拓这种活就和传统的瀑布开拓差不多:未知的前期设计,痛楚的后期集成。
好在,每次这种设计的周期都比较短。

新的业务需求来临时,前端、后台是一起开始事情的。
而不是后台在前,又或者前端先完成。
他们开始与业务职员沟通,须要在页面上显示哪些内容,须要做哪一些转换及分外处理。

然后便合营着去设计相应的 API:要求的 API 路径是哪一个、要求里要有哪些参数、是否须要鉴权处理等等。
对付返回结果来说,仍旧也须要一系列的定义:返回哪些相应的字段、额外的显示参数、分外的 header 返回等等。
除此,还须要谈论一些非常情形,如用户授权失落败,做事端没有返回结果。

整理出一个相应的文档约定,前端与后台便去编写相应的实当代码。

末了,再经历痛楚的集成,便算是能完成了事情。

可是,API 在这个过程中是不断变革的,因此在这个过程中须要的是协作能力。
它也能从侧面地反响中,团队的协作水平。

API 的协作设计

API 设计该当由前端开拓者来驱动的。
后台只供应前端想要的数据,而不是反过来的。
后台供应数据,前端从中选择须要的内容。

我们常报怨后台 API 设计得不合理,紧张便是由于后台不知道前端须要什么内容。
这就彷佛我们接到了一个需求,而 UX 或者美工给老板见过设计图,但是并没有给我们看。
我们能设计出符合需求的界面吗?答案,不用想也知道。

因此,当我们把 API 的设计交给后台的时候,也就意味着这个 API 将更符合后台的需求。
那么它的设计就趋向于对后台更大略的结果,比如后台返回给前端一个 Unix 韶光,而前端须要的是一个标准韶光。
又或者是反过来的,前端须要的是一个 Unix 韶光,而后台返回给你的是当地的韶光。

与此同时,按前端职员的假设,我们也会做类似的、『禁绝确』的 API 设计。

因此,API 设计这种活动便像是一个博弈。

利用文档规范 API

不论是异地,或者是坐一起协作开拓,利用 API 文档来确保对接成功,是一个“低本钱”、较为通用的选择。
在这一点上,利用接口及函数调用,与利用 REST API 来进行通讯,并没有太大的差异。

先写一个 API 文档,双方一起来掩护,文档放在一个公共的地方,方便修正,方便沟通。
逐步的再随着这个过程中的一些变革,如无法供应事先定好的接口、不须要某个值等等,再去修正接口及文档。

可这个时候由于没有一个可用的 API,因此前端开拓职员便须要自己去 Mock 数据,或者搭建一个 Mock Server 来完成后续的事情。

因此,这个时候就涌现了两个问题:

掩护 API 文档很痛楚

须要一个同步的 Mock Server

而在早期,开拓职员有同样的问题,于是他们有了 JavaDoc、JSDoc 这样的工具。
它可以一个根据代码文件中中注释信息,天生运用程序或库、模块的API文档的工具。

同样的对付 API 来说,也可以采纳类似的步骤,如 Swagger。
它是基于 YAML语法定义 RESTful API,如:

Swagger代码

swagger:\"大众2.0\"大众

info:

version:1.0.0

title: Simple API

description: A simple API to learn how to write OpenAPI Specification

schemes:

- https

host: simple.api

basePath: /openapi101

paths: {}

它会自动天生一篇排版幽美的API文档,与此同时还能天生一个供前端职员利用的 Mock Server。
同时,它还能支持根据 Swagger API Spec 天生客户端和做事真个代码。

然而,它并不能办理没有人掩护文档的问题,并且无法及时地关照其余一方。
当前端开拓职员修正左券时,后台开拓职员无法及时地知道,反之亦然。
但是持续集成与自动化测试则可以做到这一点。

左券测试:基于持续集成与自动化测试

当我们定好了这个 API 的规范时,这个 API 就可以称为是前后端之间的左券,这种设计办法也可以称为『左券式设计』。
(定义来自维基百科)

引用

这种方法哀求软件设计者为软件组件定义正式的,精确的并且可验证的接口,这样,为传统的抽象数据类型又增加了先验条件、后验条件和不变式。
这种方法的名字里用到的“左券”或者说“左券”是一种比喻,由于它和商业左券的情形有点类似。

按传统的『瀑布开拓模型』来看,这个左券该当由前端职员来创建。
由于当后台没有供应 API 的时候,前端职员须要自己去搭建 Mock Server 的。
可是,这个 Mock API 的准确性则是由后台来担保的,因此它须要共同去掩护。

与其用文档来规范,不如考试测验用持续集成与测试来掩护 API,担保协作方都可以及时知道。

在 2011 年,Martin Folwer 就写了一篇干系的文章:集成左券测试,先容了相应的测试办法:

其步骤如下:

编写左券(即 API)。
即规定好 API 要求的 URL、要求内容、返回结果、鉴权办法等等。

根据左券编写 Mock Server。
可以彩 Moco

编写集成测试将要求发给这个 Mock Server,并验证

如下是我们项目利用的Moco天生的左券,再通过Moscow来进行 API 测试。

Api测试代码

[

{

\"大众description\"大众:\公众should_response_text_foo\"大众,

\"大众request\公众: {

\"大众method\公众:\"大众GET\"大众,

\"大众uri\"大众:\"大众/property\"大众

},

\"大众response\公众: {

\"大众status\公众:401,

\"大众json\"大众: {

\"大众message\公众:\公众Full authentication is required to access this resource\公众

}

}

}

]

只须要在相应的测试代码里要求资源,并验证返回结果即可。

而对付前端来说,则是依赖于 UI 自动化测试。
在测试的时候,启动这个 Mock Server,并借助于 Selenium 来访问浏览器相应的地址,仿照用户的行为进行操作,并验证相应的数据是否精确。

当左券发生发动的时候,持续集成便失落败了。
因此相应的后台测试数据也须要做相应的修正,相应的前端集成测试也须要做相应的修正。
因此,这一改动就可以即时地关照各方了。

前端测试与 API 适配器

由于前端存在跨域要求的问题,我们就须要利用代理来办理这个问题,如 node-http-proxy,并写上不同环境的配置:

这个代理就像一个适配器一样,为我们匹配不同的环境。

在前后端分离的运用中,对付表单是要经由前端和后台的双重处理的。
同样的,对付前端获取到的数据来说,也该当要常常这样的双重处理。
因此,我们就可以大略地在数据处理端做一层适配。

写前真个代码,我们常常须要写下各种各样的:

前端代码

if(response && response.data && response.data.length >0){}

纵然后台向前端担保,一定不会返回 null 的,但是我总想加一个判断。
刚开始写 React 组件的时候,创造它自带了一个名为 PropTypes 的类型检测工具,它会对传入的数据进行验证。
而诸如 TypeScript 这种强类型的措辞也有其类似的机制。

我们须要处理同的非常数据,不同情形下的返回值等等。
因此,我之前考试测验开拓 DDM 来办理这样的问题,只是轮子没有造完。
诸如 Redux 可以管理状态,还该当有个相应的类型检测及 Adapter 工具。

除此,还有一种情形是利用第三方 API,也须要这样的适配层。
很多时候,我们须要的第三方 API 以公告的形式来关照各方,可每每我们不会及时地根据这些变革。

一样平常来说这种事情是后台去做代码的,不得已由前端来实现时,也须要加一层相应的适配层。

小结

总之,API 利用的第一原则:不要『相信』前端供应的数据,不要『相信』后台返回的数据。

作者:熵谈电商

链接:https://www.jianshu.com/p/f5fefa0b60f5

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者得到授权并注明出处。

标签:

相关文章

线上IT教育,新时代人才培养的新引擎

随着互联网技术的飞速发展,线上教育逐渐成为新时代人才培养的重要途径。在众多线上教育领域,IT教育因其独特的魅力和广阔的发展前景,成...

Web前端 2024-12-15 阅读0 评论0

php遍历dom技巧_PHP 编程XML DOM

DOM 是什么?W3C DOM 供应了针对 HTML 和 XML 文档的标准工具集,以及用于访问和操作这些文档的标准接口。W3C...

Web前端 2024-12-15 阅读0 评论0

phpcookie时效技巧_cookie时效无限延长筹划

a、怎么样才能绕过登录,实现从前端到后真个自动化实行b、面对繁芜的登录验证无法直接自动获取到cookie,须要人工操作登录,而co...

Web前端 2024-12-15 阅读0 评论0