自学内容网 自学内容网

前后端交互接口(一)

前后端交互接口(一)

前言

在上一集我们就完成了全局通知窗口的功能,这一集开始我们也要开始讲讲前后端交互接口这件事情,以及谈谈客户端和服务端开发的一些事情。

后续的规划

我们会先完成整个客户端才开始接入服务端的内容。

那么我们在完成业务逻辑的时候还是需要搭配服务器的。这个怎么解决?

那么在我们开发客户端阶段,我们会通过Qt内置的网络编程模块,搭建一个“测试用服务器”,也就是我们所说的MockServer。

我们在后续的某些功能点,都是需要以以下流程进行。

客户端    ----     测试服务器   ----    测试

在实际开发的时候,我们通常是分为两个团队,一个是负责客户端、另一个是负责服务端。

我们在开发的时候,不可能开发了一个内容需要另一个团队的配合的接口就去等对方,这个是效率很低的一个方式,所以我们在开发的时候一般都会在自己的那一方,比如客户端方,做一个功能精简的测试服务器。在开发的最后,我们再进行联调。

前后端交互接口约定

为了完成我们各种业务逻辑,能够让客户端与服务端之间正常的交互通信,我们就需要约定“前后端交互接口”。

我们也需要规定,客户端能够发送哪些请求,服务端返回的相应是怎么样的。

我们这也是在自定义应用层协议。

那么我们这里先给出三条约定!!!

客户端与服务端的通信协议

我们使用HTTP以及Websocket这两个协议。

HTTP协议想必大家都不陌生,是一个一问一答的通信协议,他需要让客户端对服务端发送请求,之后服务端返回相应的响应。但是HTTP不能够主动给客户端推送消息,所以我们就要引入另一个协议----Websocket

Websocket也是一个知名的应用层协议,我们将会在接下来的编程当中使用它来解决我们无法直接使用HTTP让服务端主动推送消息给客户端的难题。

那么我们还是举个栗子吧,我们什么时候会需要使用到服务端主动推送消息呢?

比如,我给我的同学发送消息,这里虽然说看上去只有我们两个连接了,其实中间是还有我们之间和服务端之间的联系,那么我们主动发送信息给客户端,这里是没有任何问题的,但是信息要通过服务端传递给我的同学,我们就需要服务端主动推送信息,这时就要用到我们的Websocket这个协议了。

HTTP请求与响应、数据格式约定

我们在使用HTTP协议的时候,我们程序员需要考虑客户端发送的HTTP的请求应该有什么约定,服务端的响应又应该有什么约定,我们这里的约定是约定的我们的方法、路径、body之类的内容。这都是我们HTTP协议相关的内容,建议小伙伴们先详细学习HTTP协议再继续看。


我们规定客户端发送的所有的请求我们一律使用POST方法,暂时不使用GET方法。我们需要给服务端传输的数据也一律通过body进行传输,不使用query string的方式。我们的不同的功能点用到的请求也是通过不同的路径进行区分即可。服务端返回的数据,我们也是使用body来返回!!!

有人可能要问了,为什么不使用RESTful编程架构?我们不能使用RESTful编程架构吗?

答案是我认为这个项目可以暂时不使用,而且RESTful编程架构是一个很好的设计风格,在这个项目中也可以去使用,C++社区里面也是提供了多个库和框架支持RESTful API的开发。

好处也很多!!!易于开发、可拓展性、松耦合性等。

使用Protobuf序列化/反序列化

那么进一步,我们也约定我们的HTTP的请求与响应,body部分统一使用我们的Protobuf来进行序列化和反序列化!!!

Protobuf(Protocol Buffers)是一种由Google开发的二进制序列化格式和相关的技术,它用于高效地序列化和反序列化结构化数据,通常用于网络通信、数据存储等场景。

可能又有人要问了,为什么我们不使用JSON,不使用XML,不使用YML?

我们写C++的那批人都有一个追求,就是提高效率。

对比JSON

在性能上,我们的Protobuf的序列化与反序列化的速度都是明显优于JSON的,Protobuf使用预定义的Schema解析二进制数据,避免了运行时的类型推断开销,从而在性能上具有明显优势。Protobuf的编码解码性能比JSON高出2-4倍,且内存占用只有JSON的一半。

由于Protobuf编码成二进制,破解成本增大,相对于XML和JSON来说更加安全。

那么我们的这一集就先到这里。


原文地址:https://blog.csdn.net/zhuzhu_YT/article/details/143584879

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!