接口前后端之间的通信大多是通过接口进行的。一般来说,接口就是一个有输入参数和返回数据的函数。与一般编程中使用的函数不同的是,前端相当于只有一个函数名(链接)可以调用。该接口可以返回一个完整的html页面,也可以返回一段数据(json数据)。总之,这个函数必须要返回,哪怕只是成功的提示。get和post这两种最基本的请求方式在显式和隐式参数传递上有所不同。具体可以参考本文get显式传参的请求方式。参数在链接中直接表示,例如向https://baidu.com的/get-test接口发送参数为{haoye:"blabla"}的request请求代码演示:(使用axios请求工具here)axios.get("https://baidu.com/get-test?haoye=blabla").then(r=>{//这里使用的函数是promise的形式console.log(r.data)//这里处理返回结果})之所以显式是因为这个请求方法,使用这个方法发送请求,直接从浏览器输入https://baidu.com/get-test?haoye=blabla是等价的,返回的内容相同,链接中包含所有需要的参数。参数的表示形式为请求链接(域名+请求地址)后接?,key=value,不同参数之间用&隔开,如上例:https://baidu.com/get-test?haoye=blabla&haoye2=2,即向https://baidu.com的/get-test接口发送请求,参数为{haoye:"blabla",haoye2:2}(参数类型不需要要在链接中注明,都是字符串,delivery是在后端解析的,这是解析后的结果)隐式传参的post请求方法,参数包裹在请求体中,比如发送给https://baidu.com的/post-test接口是{haoye:"blabla"}的request请求代码演示:(这里使用axios请求工具)axios.post("https://baidu.com/post-test",{haoye:"blabla"}).then(r=>{//这里使用的函数是promise的形式console.log(r.data)//这里处理返回结果})The之所以隐式是因为这种请求方式,参数没有显示在链接中,而是包含在请求体中,在浏览器中直接输入链接不太方便,因为后端缺少参数haoye,并且不会有正常返回后端接收前端请求发送了,后端需要怎么接收呢??首先,接口建立在一个正在运行的服务器上;其次,服务器监听当前ip收到的请求,检测请求中包含的路由地址,这个路由地址就是我们定义的接口名;通过编写相应的程序,建立监听请求的服务器,识别请求的路由地址,并进行相应的返回,即接口的编写完成;那么接口怎么写呢?比如Java的spring框架中@RestControllerpublicclassMyGetMethod{@RequestMapping(value="/get-test",method=RequestMethod.GET)publicStringgetwithParam(@RequestParam("haoye")Stringhaoye){//获取接口返回"我收到了参数haoye:"+haoye;}}nodejs中的expapp.get("/get-test",async(req,res)=>{consthaoye=req.query.haoyeres.send("我收到参数haoye:"+haoye;)})appintheressframework.post("/post-test",async(req,res)=>{consthaoye=req.body.haoyeres.send("我收到了参数haoye:"+haoye;)})当然有其他常见的后台语言,比如golang,世界上最好用的php,python(django框架),当然你甚至可以用C语言,汇编等等,但是建议不要和自己过不去PS:可以看出在node中,接收参数的方式比java自由多了。即使是post类型的链接,参数是get类型的,也可以通过.query获取。get和post本质上是两种形式的参数传递;但在实际应用中不建议混用。降低可读性和不方便的接口调用接口测试通常前端开发需要测试后端开发的某个接口,包括接口监控和接口测试;首先接口监控,在前端开发调试或者写爬虫的观察阶段(爬虫写的好可以吃饱),如何查看某个接口发送的带参数的请求?在浏览器控制台的源码页面,随机抓取一个受害网站如下:可以看到这里可以设置断点来调试代码但是问题来了,如果懒得调试代码,或者为了防止源码代码泄露与初级爬虫,代码被压缩无法查看怎么办?在控制台的网页上,随机抓取一个受害网站:可以看到,在打开一个网页时,会发送很多请求来获取资源。可以使用preview来预览请求的内容,也可以是页面或数据,具体哪个是你要查看的接口,耐心找找就行了另一个是接口调用测试。get类型的接口可以通过浏览器直接输入测试,但是post呢?如果get需要一些重要的请求标头怎么办?这些都是链接中不能直接表达的东西这里推荐postman这个接口测试工具,高效测试项目的接口衍生请求方式随着前端的发展,get和post不仅有它们的意义通信协议层,也有业务逻辑层的意思,所以就有get、post、delete、put/patch的一套rest风格的接口,这些方法只是一个标准(当然还有插件实现本标准的),参考本标准通过执行流程编写后台程序比传统的接口开发-get方式除了表达显式请求外,还要从服务器获取某些资源,效率更高;只是获取,不对后台数据库做任何改动post除了隐式请求之外,也意味着向后台数据库插入一条新的数据由此衍生,删除,顾名思义,从数据库中删除一条数据;delete本质上是一个get请求,但是delete的参数在route中,比如/delete-t??est/1,表示调用delete-test接口删除一条id为1的数据;为了防止未经许可的用户调用该方法,通常需要在请求头中携带相关token才能正常调用该接口等等,put/patch就是覆盖一段数据。不同的是put需要提供那条数据的所有字段信息,而patch只需要提供需要修改的字段即可。调用方式是先在路由中声明id,/put-test/1或/patch-test/1,然后隐式提供需要修改的数据框作为一个合格的后台,需要做的包括能够启动程序监视器可以解析所有来自计算机某个端口的请求,按照http标准对这些请求进行正确的判断和处理,并按照http标准返回数据一个简单的后台服务器可以实现如果以上需求都可以实现,所以任何语言都可以写后台;但是要手工实现这些需求会是一个巨大的工程,不过好在已经有很多好心人帮我们实现了这些功能,实现一些通用需求的外部包一般都叫做framework以nodejs为例。nodejs中可以用来搭建后台服务器的框架有express、koa、socket.io、hapi等,以express为例,参考第二章第一个nodejs程序,详细解释代码constexpress=require('express'),bodyParser=require('body-parser');constapp=express()//使用express函数app.use(bodyParser.json());//调用插件,使接收到的请求体中的数据自动转为json格式app.use(express.static(path.join(__dirname,'public')));//管理静态资源,这些管理的资源都是前端代码的前端代码在这里,这里采用前后端分离的开发方式。asyncfunctionsignIn(request,response){//在这里定义一个函数constidentifier=request.body.identifier,password=request.body.passwordlogin({identifier,password}).then(r=>{letuser=r.user;user=optimizeUser(user);response.send({success:true,info:r});}).catch(error=>{constmessage=getErrorMessage(error);responsese.send({错误:消息});});}app.post('/signIn',signIn);//这里新建一个服务端登录界面,处理函数就是上面定义的函数app.listen(8080)//启动服务端,监听8080端口console.log("success")//成功提示可以可以看到signIn接口接收到的参数只有identifier和password,返回的参数为{success:true,info:{user:{}},error:"message"}也就是说只要前后端约定,接口名称为signIn,接收参数为identifier和password,返回数据为{success:true,info:{user:{}},error:"message"},前后端后端可以开始编写自己的登录相关代码;可以同时开始开发,互不干扰。您可以在上线前对其进行测试。了解了这些,基本上就可以开发一个项目了;cms对于一些中小型,数据结构符合传统的sql数据库。代码编写项目现在有了一站式解决方案——CMS(ContentManagementSystem),即内容管理系统。最初是用来搭建个人博客的,后来逐渐衍生出一些新的功能,更侧重于Content而不是pages,所以就有了headlessCMS,也就是里面只有数据内容,并没有注意数据库使用的内容或页面的外观。是headless状态,适合一些中小型项目开发;一个合格的cms应该做到以下几点:无需手工编写即可创建数据库,具有可视化增删查改数据库的综合管理功能。可以为数据库中的每个表提供restful接口和文档,方便调用,提供大量一些项目需要的一些常用功能,如:用户登录,身份权限管理,用户真实身份邮箱验证,提供可靠的文件管理system这里有一些常用的开源cms,强烈推荐strapi,功能强大,使用方便,并且提供了restful接口完整的支持,这里查看strapi中restful接口的一些额外查询功能;具有完整的登录和权限管理模块;并且有强大的关系型数据库构建功能
