接口开发总结,接口开发是什么意思

4747 263 2022-08-06


本文主要讲述了接口开发总结,接口开发是什么意思。

  1. 什么是接口?

我理解的接口其实就是系统对外提供的服务,客户端(浏览器、手机APP、微信小程序)通过接口的请求地址请求接口,并传入接口约定好的参数,然后接口进行业务逻辑处理,最后按照约定好的数据格式返回数据。(看到这里,大家是不是觉着接口和咱们项目里面Controller类里的写的方法很像。没错,在这里你可以简单的理解为,接口就是咱们项目里Controller类里面写的一个个的请求方法。)

2.如何统一接口返回的数据格式?如何统一接口的返回值?

当时我们自己封装了一个ServerResponse类,这个类里面包含code,message,data三项属性,其中code代表业务操作状态码,message代表业务操作状态码的含义,data代表接口具体返回的数据。这样我们在Controller层的各个方法中,统一返回的都是我们自定义的ServerResponse对象。另外为了方便进行堆code和message的统一赋值对我们还自定义了一个枚举类ResponseEnum。这个枚举类里其实就是定义了每一个业务操作状态码及业务操作状态码对应的含义。

3.接口文档存在的意义?

第一可以方便前端开发人员和后端开发的人员的沟通交流,提高了工作效率吧。第二呢我觉着万一项目组成员发生了变更,后面替上来的人也可以通过接口文档很快的上手工作。

4.接口文档里包含哪些东西?如何编写接口文档呢?

在编写接口文档时通常需要写清楚接口的业务描述,接口的请求地址,请求方式,请求参数的类型,是否含有头信息,请求参数的含义以及接口的响应格式【json/xml】,响应内容,响应内容的各个字段含义。最开始写接口文档的时候我都是用最传统的方法写的,就是很笨的建了一个文档然后在里面写上接口的业务描述,接口的请求地址啊,请求方式啊,请求参数的类型啊,是否含有头信息,请求参数的含义以及接口的响应数据格式【json/xml】,响应内容,响应内容的各个字段含义等等之类的。后来我了解到原来有一个叫Swagger的接口文档工具,用完之后感觉太方便了,它就只需要在项目的接口上面加上一些简单的注解,就可以自动的生成接口文档。

5.你怎么做的接口开发?

我在之前工作的过程中,我们的经理给我说,我们项目需要给前台提供RESTful接口,当时对这个RESTful只是了解并没有真正的在项目中使用过,所以下去我也查阅了许多关于RESTful接口开发的文档,通过文档得知,restful是ROA面向资源编程的一种设计风格,RESTful不是一项新技术,其实就是符合RESTful风格的url,都被称之为RESTful类型的接口,因为在互联网中可以通过url去访问任意的资源,比如:文章、图片、视频等,像这个RESTful在使用的时候就要注意,路径中不能出现动词,最好是名词并且要以复数的形式出现,RESTful是基于HTTP协议现有的Get动作进行查询,Post动作进行增加,Put动作进行修改,Delete动作进行删除。

经过了解之后,我就开始了基于SpringMVC进行restful接口项目的开发。开发时用到的注解有 @RestController @PathVariable @RequestBody @Value @RestControllerAdvice这些,其中 @RestController就相当于 @Controller 和 @ResponseBody的组合体,这样就可以避免在各个方法上加入 @ResponseBody注解了,@ResponseBody的作用是将java对象转换为对应的json格式,默认使用的是Jackson这个第三方的工具包,这个注解的本质说白了就是通过Jackson将java对象转换为对应的json格式的字符串并且通过response获取输出流将json格式的字符串响应给客户端,想要使@ResponseBody起作用除了要在maven的pom文件中导入jackson的依赖外还需要在spring的配置文件中加入<mvc:annotation-driven/>,@PathVariable是为了从路径中获取参数信息比如在删除操作的时候就需要从路径中获取id信息, @RequestBody起到的作用和@ResponseBody看好相反,就是将前端提交过来的json格式的数据,自动转换为对应的java对象;@Value可以从属性文件中根据key获取对应的信息,比如我们可以把调用第三方接口时需要的信息以键值对的形式写到自定义的属性文件中,然后通过context:property-placeholder加载属性文件并且通过@Value根据key找到指定的值,这样可以避免程序中出现硬编码,提高程序代码的可维护性。对于@RestControllerAdvice来说它的作用就是异常的统一处理,就相当于@ResponseBody和@ControllerAdvice的结合体,我们项目中异常的统一处理就是用它来完成的。

我们当时采用的是JSON格式的数据作为RESTful风格接口的响应结果,其中用code表示状态码,用message表示提示信息,用data表示返回的数据。为了方便返回的指定格式的JSON数据,我们自己封装了一个ServerResponse类,这个类里面包含code,message,data三项属性,其中code代表业务操作状态码,message代表业务操作状态码的含义,data代表接口具体返回的数据。这样我们在Controller层的各个方法中,统一返回的都是我们自定义的ServerResponse对象。另外为了方便进行堆code和message的统一赋值对我们还自定义了一个枚举类ResponseEnum。这个枚举类里其实就是定义了每一个业务操作状态码及业务操作状态码对应的含义。

对于客户端前台调用RESTful接口,如果涉及到跨域则可以通过多种方案解决。首先我们可以通过ajax的jsonp来解决ajax跨域问题,如果采用这种方案则客户端在发送ajax请求时候需要将datatype设置为jsonp,在服务端需要接受callback参数,结合spring提供的MappingJacksonValue来将要响应的信息作为构造参数进行传递,并调用对应的setJsonpFunction设置为参数callback对应的值;但是这种方案只能发送get请求,如果服务端接口接受的是其他类型的请求如post,put,delete则jsonp就没办法。这个时候我们可以采用spring给我们提供的@CrossOrigin注解来解决,使用这个注解的时候要特别注意一点它需要和jdk1.8及其以上配套使用,否则会报错。通过@CrossOrign的value属性指定客户端所在的域名这样客户端前台就可以使用普通的ajax进行跨域访问了而且可以发送任意类型的请求,这样就解决了上面所说的ajax jsonp只能发送get请求的问题。

写完接口之后我们通常会通过PostMan去测试接口的正确性,并且会自己编写接口文档,在编写接口文档时通常需要写清楚接口的业务描述,接口的请求地址,请求方式,请求参数的类型,是否含有头信息,请求参数的含义以及接口的响应格式【json/xml】,响应内容,响应内容的各个字段含义。

对于非技术出身的软件行业从业者来说,理解技术是一道坎,但却是向上发展所必须跨越的一道坎。在一个软件公司,无论是商务、售前还是项目经理亦或者是产品经理,对技术的理解程度,往往意味着他的专业程度。而如何理解技术,很多人无从下手。

接下来我们从以下几个方面,全面了解下软件开发的过程、所用到的技术以及专业名词,将软件开发知识串联起来,形成体系。

网络

说到网络就得从通讯提起,在信息传递过程中,肯定会有一个产生信息的源头、也会有个接收信息的宿主,以及信息传递的通道。产生信息的源头我们称之为“信源”,接收信息的宿主我们称之为“信宿”,而信息传递的通道,我们称之为“信道”。

信道或者说信息传递的介质有很多种,电话线路、光纤、无线等。信息从源头产生,被宿主接收,形成通讯网络;

bbdf8dee4e3c4df26baa52bf45de12a2.png

而计算机网络则是指,由客户机发出请求,服务器接收请求,通过有线或者无线介质进行传递,形成计算机网络;那这里存在一个疑问,假设有一台电脑和一台服务器,我从电脑中发送消息,服务器接收消息,那么服务器能精准的接收到对应的某一台客户机发送的消息的呢?就算这台服务器收到了客户机发送的请求,那么服务器如何知道客户机请求的意思呢?这中间肯定需要什么标准语法能让双方知道传达的消息内容。

这类似于我们人与人之间的沟通交流,我们把自己头脑里的想法,表达给其他人,就需要遵循一定的语言以及语义规则,让别人可以理解。计算机之间的通讯也是如此,有了信源和信宿之后,需要有语法规则让俩台物理机之间进行信息交互。于是我们的TCP/IP协议、HTTP协议就出现了。

我们在从浏览器中访问web服务器时,需要通过这些协议进行请求;在软件开发中接口与接口之间通讯也需要通过这些协议进行交互。(在接口篇详解)

硬件

软件开发中涉及到的硬件,主要是服务器,服务器的种类有很多。我们关注服务器一般是关注服务器的作用是什么,服务器的硬件配置是什么?

服务器从本质上来说,其实就是一台电脑,只不过这台电脑,没有显示屏,可以24小时不关机的运行后台程序,配置高于一般的家用电脑。

我们一般关注服务器的配置,一般关注的是内存、CPU以及硬盘等。我们关注内存是因为它决定着可同时运行多少程序,程序运行快慢;我们关注CPU是因为它决定着计算机的运算速度,计算机的性能;我们关注硬盘是因为它决定着计算机的存储空间大小。

eb57b76f8be0c74a8e330d86740d7a42.png

我们经常在部署应用时,运维或者开发会和项目经理确认服务器的配置是多大,项目经理会回复说4核8G,那这个4核是什么概念呢?

这其实要提到编程里的多线程概念,多线程是指在一个时刻可以同时处理多件事情。但是程序中的多线程其实只是概念上的多线程,真正情况是程序的运行速度非常快,它将每个代码在不同的细小的时间片中执行,然后模拟出同一时刻执行多个程序的假象。

但是多核CPU却真正的解决了这个问题,它可以真正做到,同一时间运行多个程序,4核的CPU,他就可以做到同一时间点,可以同时运行4个进程。这就满足了一台服务器运行多个应用。

依此原理,CPU的核数越多,配置越高,就可以承受更多的应用。

4核8G中的8G,也是我们经常说的关于内存的概念,内存是干什么的?为什么内存对程序的运行影响这么大?

6d48ae78390e238ba94e983f82b175d7.png

方寸之地,蕴含天地

其实软件开发中所提到的内存是指运行内存,就是代码运行的地方。比如说:我的手机运行内存是4G,那么我启动一个微信,占用了我500M的运行内存,我启动了一个抖音,占用了我500M的内存,那可能我在同时启用10个app后,我的运行内存就满了,这是就会出现手机卡顿,影响使用等这些情况。

同理而言,在服务器上,我们正常部署了一个软件时,可能会部署一些中间件,比如说openfire、redis等,这些东西和我的业务代码一样都会占用运行内存。如果我的运行内存大的话,我就可以在一台服务器上同时运行多个软件应用。

编程语言

很多非技术出身的软件从业人员,他想了解技术,一般都会直接从编程语言入手,其实了解详细的编程语言,并不能够让你快速了解软件开发的流程以及原理,但了解编程语言,有助于你判断哪些需求是工作量很大的,哪些需求是工作量小的。

现在市面上主流的编程语言有:Java、JS、PHP、Python等。其实编程语言主要是定义一些数据字段的格式,以及编写的规则,代码的语义等。然后再通过if else、for循环等语句,编写完成业务逻辑。所以我们在需求调研阶段,能将业务流程梳理清楚,流程可以跑通后,代码便可以实现。

2ba36f01e0f1aeb086b868f4988df48d.png

现在编程主要的架构还是三层架构,既:表示层、业务逻辑层、数据层,表示层是用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面,现在的软件开发越来越精细化,程序员的分工也越来越明确,一般开发分为前端开发和后端开发,表示层一般就是由前端开发人员开发完成的。前端开发人员需要和后端开发人员定义好,前后端对接的接口,用于数据传输。

业务逻辑层和数据层,则一般都是由后端开发人员完成,业务逻辑层主要是接收前端传过来的数据,然后完成客户的业务需求逻辑。业务逻辑层主要是进行逻辑处理和判断,如果涉及到需要向数据库获取数据的情况,则需要通过数据层,向数据库获取数据。

数据层主要的向数据库获取数据,加工数据,然后再将数据传递给业务逻辑层。在代码中sql语句一般都是在数据层中编写的。当然现在有很多的框架,比如说:MyBatis、hibernate等,可以自己生成sql语句进行查询,这种方式有很多好处,比如说我们在切换数据库时,就可以通过框架自生成的sql自动匹配。而不需要调整自己写的原生sql了。当然这种方式也有弊端,就是无法进行复杂的sql查询,比如说在做报表需求时,一般还是自己写sql的较多。

上面说的是我们自己内部写程序时的结构,一般在做软件时,尤其是做业务系统,一般都是要和多个系统做对接,多个系统之间通过接口对接;这个时候就需要在业务逻辑层调用时,调用到其他系统中的接口,通过参数的传递,保持俩个系统之间的联系;

总的来说:写程序可以分为三个部分来看,前端、后端以及数据库;涉及到的编程语言就是:前端语言,例如:html5、css3、js等,前端框架主要有Bootstrap、jQuery 、VUE等;后端语言,例如:Java、php、C#等,每个语言都会有自己特有的框架,以Java举例来说,它具有的框架主要就是SSM,即Spring、SpringMVC、MyBatis,现在最火的还有SpringBoot;

9a8fb884d7c54adc08ccc11fa6a45d9c.png

在这里有人会疑惑这些框架有什么用?为什么研发会这么热衷于优秀的框架?

其实框架就是一些大牛公司写好的方法,普通的程序员可以直接调用这些方法就可以完成自己的业务逻辑了,这就极大的节省了开发人员的开发时间;不仅如此,框架里封装了很多很复杂的业务逻辑,这个可以避免开发重复的造轮子。

操作数据库的sql语句也是开发软件重要的一环,sql的入门很简单,就是增删改查,但是如果要写一段优秀的sql,就会复杂到怀疑人生,写一个报表,有时候会写出几百行的sql语句,复杂到让人看都不想看。

以上是编程语言,但是在写代码时,我们还需要一些辅助的软件工具,比如说编译工具、开发的中间件、数据库、代理服务器等等;

软件

我们在编写程序时,一般都会用一个编译软件,进行编写;编译软件的好处有,我们可以在这个上面编写程序,编译软件一般都会有代码提示,极大的节省了开发时间;编译软件可以将开发写完的程序编译成可执行的class文件,然后用内置的tomcat运行程序,方便开发人员调试程序;

说到这里又提到了一个开发经常提到的名词:tomcat;很多不是技术出身的人,很不能理解tomcat这个东西,其实tomcat这个东西是一个容器,编译后的代码需要在这个容器中运行,然后代码才可以做出各种我们想要的页面和业务逻辑;

ca7e797fe3d3673a74b700b21f7be4e1.png

在开发中不可避免的都会涉及到一个软件,就是数据库。其实一些在软件行业沉浸多年的人,他们对软件有了一个返璞归真的理解,就是所有的软件都是对数据的加工,客户输入数据,系统加工数据,数据库存储数据,系统再返回数据;所有的业务逻辑都逃不过这点。可见数据库在软件开发中的地位之高,远非其他软件可比。

常见的数据库有mysql、oracle、sqlserver等。

除了这些东西,我们开发口中也会经常说一些名词,比如说redis、openfire等;其实这些在我们了解了软件运行的原理后,都能理解了。举个例子:redis,它其实就是用来做缓存的,所谓缓存就是存储,都是存数据的;但是它的读取速度要大于直接读数据库,所以一些代码运行的中间数据,一般都是存在这种缓存软件中。

我们运维或者项目人员,一般也会用一些数据库图形化工具或者服务器图形化工具,来连接服务器和数据库。这会降低学习指令的时间。

接口

最后就来说下接口了,我们现在一般都是面向接口编程,在软件开发之初,由资深的程序员设计好软件的架构,然后分配给各个下属程序员,基于这些各个模块的架构,做详细设计;这种设计中就会包括接口设计;

很多非技术的朋友一开始会关注,什么是接口,这个概念太过于抽象。其实类比到生活中就很好理解了,比如说:我们的电脑,我们在使用电脑时,不关心这个电脑内部的构造,我们关心的是提供给我们的操作方式,这也是一种接口,我们通过键盘就可以输入很多文字,做很多操作,而不用管它是如何做到的。

dee9105f053f67bfca8d3469be6fdfcb.png

在软件开发中也是如此,开发经理分配开发任务,每个人做一个功能模块,然后封装起来,如果想要获取对方模块中的数据,就可以通过一个接口来获取。

接口是要有入参和出参的,我们想要获取对方数据时,就需要对方提供个接口给我们,我们传入规定好格式的参数,然后接口返回给我们对应的结果或者数据。

接口的种类一般有基于Http的接口以及Websocket的接口,这俩种都是一种协议,我们通过这俩种协议完成接口与接口之间的数据传输。

上文就是小编为大家整理的接口开发总结,接口开发是什么意思。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:36 个接口设计是真的好用,接口设计6大原则
下一篇:接口调用方式,接口调用方式几种
相关文章

 发表评论

暂时没有评论,来抢沙发吧~