美文网首页
写给公司新入职前端的protobuf接口调用方法

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

作者: 清溪绕梧桐 | 来源:发表于2018-09-05 17:00 被阅读519次

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

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

    本篇包含以下内容:

    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接口调用方法

          本文链接:https://www.haomeiwen.com/subject/wkzawftx.html