Golang - 关于 proto 文件的一点小思考
前言
ProtoBuf 是什么?
ProtoBuf 是一套接口描述语言(IDL),通俗的讲是一种数据表达方式,也可以称为数据交换格式。
我们常用的数据格式有 JSON 和 XML,为什么使用 ProtoBuf ?是因为它的传输快,为什么传输快?大家可以找下资料。使用 .proto 文件进行描述要序列化的数据结构,然后将写好 .proto 文件使用 protoc 就可以很容易编译成众多计算机语言的接口代码。
gRPC 是什么?
gRPC 是开源的 RPC 框架,已支持主流的计算机语言,可以通过 ProtoBuf 进行定义接口,可以基于 ProtoBuf 进行数据传输。
两者虽然是一家,但是分别解决不同的问题,可以配合使用,也可以分开。
看一下的 gRPC helloworld 的 proto 文件是如何定义的?
helloworld.proto
syntax = "proto3";
package helloworld;
option go_package = "./;helloworld";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
文件中定义了一个 service Greeter 和 rpc SayHello 方法。
入参:string name
出参:string message
这些过于简单,还能不能描述其他信息?
小思考
定义的
rpc方法能否也同时支持HTTP调用?例如:SayHello 方法,既支持 gRPC 调用,也支持 HTTP 调用,同时支持protoc生成代码时,同时也生成Swagger接口文档。定义的入参能否支持参数验证?例如:name 长度不能大于 20 个字符。
定义的
serviceGreeter 服务能否支持拦截器?例如:该服务下的所有方法需要进行登录令牌验证。定义的
rpcSayHello 方法能够支持拦截器?例如:当前方法支持开启和关闭是否记录日志。
小结
以上问题还未完全解决,学习 gRPC 感觉有些吃力...
大家有没有可以推荐的学习资源?目前在看 grpc-gateway 。
推荐阅读
- Go - 使用 sync.WaitGroup 来实现并发操作
- Go - 使用 sync.Map 解决 map 并发安全问题
- Go - 基于逃逸分析来提升程序性能
- Go - 使用 sync.Pool 来减少 GC 压力
- Go - 使用 options 设计模式
Golang - 关于 proto 文件的一点小思考的更多相关文章
- 信号处理——EMD、VMD的一点小思考
作者:桂. 时间:2017-03-06 20:57:22 链接:http://www.cnblogs.com/xingshansi/p/6511916.html 前言 本文为Hilbert变换一篇的 ...
- MySQL-Front 建表引发的一点小思考(数据表格模版)
我们建表的时候,有一些字段总是会常用到的.也就是每一张表都会有这些字段. 我用mysql有一点时间了,今天(2016-02-27 21:53:38)在用mysql-front建表的时候,感觉有点点不太 ...
- xss和实体编码的一点小思考
首先,浏览器渲染分以下几步: 解析HTML生成DOM树. 解析CSS生成CSSOM规则树. 将DOM树与CSSOM规则树合并在一起生成渲染树. 遍历渲染树开始布局,计算每个节点的位置大小信息. 将渲染 ...
- sqlserver数据库不能重命名报错5030——我的一点小思考
在学习asp.net的时候使用mssql‘经常会出现这种错误,数据库不能重名名5030的错误,其实很简单原因就是有应用程序正在占用这个连接,使用这样一行命令就可以查询出正在占用的连接 use mast ...
- Google Protocol Buffer的安装与.proto文件的定义
什么是protocol Buffer呢? Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准. 我理解的就是:它是一种轻便高效的结构 ...
- 关于win8开发的一点小总结
我今天做画面的时候,发现了一点小问题. 我在xmal文件里面加了一个CheckBox控件,设置IsChecked属性为True,并添加了Checked事件.Checked事件里面有对另外一个TextB ...
- [原创].NET 分布式架构开发实战之三 数据访问深入一点的思考
原文:[原创].NET 分布式架构开发实战之三 数据访问深入一点的思考 .NET 分布式架构开发实战之三 数据访问深入一点的思考 前言:首先,感谢园子里的朋友对文章的支持,感谢大家,希望本系列的文章能 ...
- Google Protocol Buffer的安装与.proto文件的定义(转)
转自(https://www.cnblogs.com/yinheyi/p/6080244.html) 什么是protocol Buffer呢? Google Protocol Buffer( 简称 P ...
- ProtoBuffer由.proto文件生成.cc/.h
ProtoBuffer由.proto文件生成.cc/.h 一:编译源码下载地址:http://code.google.com/p/protobuf/downloads/list 下载后,根据编译说明进 ...
随机推荐
- 手把手教你写hexo博客
市面上现在有各种博客框架,本博客教大家的是Hexo博客框架,目前比较火.搭建博客中遇到各种各样问题,网上方案也比较成熟. 一.搭建环境 安装 git 安装 node.js 安装 Hexo npm in ...
- DDD领域驱动设计-概述-Ⅰ
如果我看得更远,那是因为我站在巨人的肩膀上.(If I have seen further it is by standing on ye shoulder of Giants.) ...
- .Net(c#)汉字和Unicode编码互相转换实例
{"name": "\u676d\u5dde", "href": "www.baidu.com"} 经常遇到这样内容的j ...
- Jquery校验中国身份证号码是否正确
在项目中使用表单时经常会涉及到身份证号码是否正确的校验,下面看看应该中国二代身份证号码应该怎么用Jquery校验呢? 二代身份证校验码的计算方法 二代身份证由17位数字和一位校验码组成,那么校验方法是 ...
- linux 内核源代码情景分析——越界访问
页式存储管理机制通过页面目录和页面表将每个线性地址转换成物理地址,当遇到下面几种情况就会使CPU产生一次缺页中断,从而执行预定的页面异常处理程序: ① 相应的页面目录或页表项为空,也就是该线性地址与物 ...
- oracle 账号解锁 java.sql.SQLException: ORA-28000: the account is locked
日志报错:ORA-28000: the account is locked 1.plsql登录提示用户被锁定 2.sys登录sqlplus登录查看 SQL> select username,ac ...
- Nginx高级特性实操
导读 nginx从入门到精通,点我直达 下载nginx与安装 点我直达 安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl opens ...
- 羽夏看Win系统内核——保护模式篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- IDEA插件和个性化配置推荐
插件推荐 我自己现在使用的一些插件和一些自己感觉比较舒服配置分析给大家 idea如何安装插件: 如果打开设置没有看到,直接搜索plugins 然后在这里搜索即可 CodeGlance 小地图 和vsc ...
- win10 python3.8 wxpython.whl 安装步骤
wxpython是python开发常用图形用户界面(GUI)工具之一,GUI因其直观便捷,对我们提高开发效率一定帮助.这里介绍一下新版本wxPython 4.0.1的安装过程及注意事项. 第1步:下 ...