这只是一篇针对公司内部的指引导性的文档,不是一篇教程。
数据层面前段如何与后端对接
本篇包含以下内容:
1、接口技术简介
2、如何与后端对接
一、接口技术简介
我们使用的gRPC来进行前后台的数据对接。看下官方介绍
gRPC is a modern open source high performance RPC framework that can run in any environment.
——-https://grpc.io/about/
gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。
——-http://doc.oschina.net/grpc?t=58008
(没有找到中文官网,如果找到请添加到这)
好了以上这些。。。了解一下,也可以就是看看,下面是我们日常使用的主角。
gRPC 默认使用 protocol buffers,这是 Google 开源的一套成熟的结构数据序列化机制,别紧张他就如同json一样是一种数据序列化的协议,gRPC也可以使用json作为数据传输格式。
是的,我们使用的就是protobuf,所以重点是要了解这个。
可以去官网或者其他地方找个教程看一下,总体来说比较简单,需要重点关注的是protobuf协议下数据类型对应的js下的数据类型。
使用protobuf的方式也很简单:
“你只需要将要被序列化的数据结构定义一次(译注:使用.proto文件定义),便可以使用特别生成的源代码(译注:使用protobuf提供的生成工具)轻松的使用不同的数据流完成对这些结构数据的读写操作,即使你使用不同的语言(译注:protobuf的跨语言支持特性)”
简单讲就是,在.proto 文件中制定协议,然后使用编译器生成特定语言的数据访问类,这个类里边包含了序列化,反序列化,toObject,设置/获取参数,转化成二进制数据等方法。
这些方法根据不同语言版本都有生成不同的文件,使用时可以根据不同语言自身语法进行调用,使用起来相当方便。
教程参见文末“参考网址”
二、如何与后端对接
根据上面说的,对接基本步骤如下:
查看协议组装参数>调用接口类的方法>发送请求>解析返回值。
项目中协议文件是后端已经写好的,js的调用类也是编译好的,我们只管用就好了
上图是proto库的文件目录,go的是golang的,后端使用的,grpc-web和js文件夹是js的,前端使用的。proto文件夹里边是协议文件。
我们需要查看的协议文件如下图,api和common里边的协议文件。
如打开api>v1>account.proto文件,会看到下图这种
rpc后边这些就都是方法名称,在account.js内可以找到对应的方法名(通常是这个名字然后首字母小写)
方法名称后边括弧紧跟的是参数,参数在文件内有定义,或者在其他文件内有定义,根据路径可以查看。例如在accout.proto内查找RegisterReq会找到下面的定义
参数有5个字段,email,passkey,sig,passwd_level,verify。
前面三个都是字符串或者字节数组类型,后边的passwd_level是PasswdLevel类型,verify是VerifyReq类型,这俩类型是自定义的。
再查找这个类如下:
这就是PasswdLevel的定义,可以看到有这么几个值。前边的enum显示这是一个枚举类型,根据相应的level选择值就可以了。
Verify的类型定义如下,context字段是后端返回结果带过来的上下文,这个文件当中也有定义,可以继续再往下查找查看具体内容。
根据上边的查看步骤,层层组装好参数就可以了。
编译器会根据proto文件生成对应的类。
比如api>v1>account.proto编译后会对应的生成 api>v1>account.js ,js里边会给出一个类,打开account.js可以看到代码第一行goog.provide('proto.biss.api.v1.account.AccountClient');
这货就是生成的account的类,那么以后调用account下的方法时就要实例化这个类了
account.proto中定义的方法也会出现在这个文件中(通常是这个名字然后首字母小写)
方法的请求参数和返回数据需要在 js>api>v1下对应的文件内查看。比如registerReq这个类的定义。里边还会包含参数对应的操作方法(toObject,序列化这些)
调用接口类和发送请求在项目中已经封装了send方法可以直接用。使用方法参见api的说明。
返回结果后根据不同的数据返回类型调用不同的方法获取就可以了。之前提到的反序列,toObject,这些方法。
参考地址:
gRPC官网地址:https://grpc.io
gRPC中文文档地址:http://doc.oschina.net/grpc?t=58008
protobuf协议git仓库地址: https://github.com/protocolbuffers/protobuf
protobuf文档地址:https://developers.google.com/protocol-buffers/
有疑问加站长微信联系(非本文作者)