写给公司新入职前端的protobuf接口调用方法

清溪绕梧桐 · · 2402 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

这只是一篇针对公司内部的指引导性的文档,不是一篇教程。

数据层面前段如何与后端对接

本篇包含以下内容:

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/


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:清溪绕梧桐

查看原文:写给公司新入职前端的protobuf接口调用方法

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2402 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传