当前位置: 首页 > news >正文

物价工作信息网站建设蓝天网站建设

物价工作信息网站建设,蓝天网站建设,建设工程网站什么时候可以同步,个人网站怎么做appoption自定义http规则和http body响应 简介 本篇接上文 golang 工程组件:grpc-gateway 环境安装默认网关测试 默认网关配置终究是难用,本篇介绍一下proto里采用option自定义http规则以及让网关返回http响应而不是我们定义的grpc响应 option定义http…

option自定义http规则和http body响应

简介

本篇接上文

golang 工程组件:grpc-gateway 环境安装+默认网关测试

默认网关配置终究是难用,本篇介绍一下proto里采用option自定义http规则以及让网关返回http响应而不是我们定义的grpc响应

option定义http规则和httpbody响应

引入库。可以直接拷贝grpc-gateway源码下google文件夹到项目下

import "google/api/annotations.proto";
import "google/api/httpbody.proto";
import "google/protobuf/empty.proto";

user.proto

syntax = "proto3";
package  echo;
option go_package = "echo/proto";import "google/api/annotations.proto";
import "google/api/httpbody.proto";
import "google/protobuf/empty.proto";message User{int64 id = 1;// 改成下划线形式string userName = 2[json_name="user_name"];int32 age = 3;string phone = 4;Addr addr = 5;
}message Addr {string province = 1;string city = 2;string county = 3;
}service Echo{rpc Get(User) returns (User) {//get请求option (google.api.http) = {get: "/echo/user/{id}"};}rpc AddOrUpdate(User) returns (User) {option (google.api.http) = {post: "/echo/user"// * 表示接受user所有字段body: "*"additional_bindings {put: "/echo/user"body: "*"}//patch 请求,只更新部分字段additional_bindings {patch: "/echo/user"body: "addr"}};}rpc Delete(User) returns (User) {option (google.api.http) = {delete: "/echo/user/{id}"};}// httpbody响应,前面是grpc定义的消息rpc List(google.protobuf.Empty) returns (stream google.api.HttpBody) {option (google.api.http) = {get: "/echo/user/list"};}
}

对应grpc实现

server.go

package serverimport ("context""echo/proto""fmt""github.com/golang/protobuf/jsonpb"_ "github.com/golang/protobuf/jsonpb""google.golang.org/genproto/googleapis/api/httpbody"_ "google.golang.org/genproto/googleapis/api/httpbody""google.golang.org/protobuf/types/known/emptypb"_ "google.golang.org/protobuf/types/known/emptypb"
)type echoServer struct {proto.UnimplementedEchoServer
}func NewServer() proto.EchoServer {return &echoServer{}
}
func (s *echoServer) Get(ctx context.Context, in *proto.User) (*proto.User, error) {fmt.Printf("%+v\n", in)return in, nil
}
func (s *echoServer) AddOrUpdate(ctx context.Context, in *proto.User) (*proto.User, error) {fmt.Printf("%+v\n", in)return in, nil
}
func (s *echoServer) Delete(ctx context.Context, in *proto.User) (*proto.User, error) {fmt.Printf("%+v\n", in)return in, nil
}func (s *echoServer) List(in *emptypb.Empty, stream proto.Echo_ListServer) error {userList := []*proto.User{{Id:       1,UserName: "test1",Addr: &proto.Addr{Province: "深圳1",},},{Id:       2,UserName: "test2",Addr: &proto.Addr{Province: "深圳2",},},{Id:       3,UserName: "test3",Addr: &proto.Addr{Province: "深圳3",},},}for _, u := range userList {//jsonpb库序列化返回的才是下划线形式。 json序列化不读tag里定义m := jsonpb.Marshaler{}data, _ := m.MarshalToString(u)msg := &httpbody.HttpBody{ContentType: "application/json",Data:        []byte(data),}stream.Send(msg)}return nil
}

启动后按对应路由访问即可。 网关和启动源码在上文里

http://www.yayakq.cn/news/992861/

相关文章:

  • a032网站模版宝安区网站建设
  • 如何新建站点网页设计制作工资
  • 网站怎么做海外推广中级经济师考试成绩查询
  • 品牌网站建设怎么做重庆市工程建设交易中心网站
  • 什么叫网站根目录黑龙江建设局官网
  • 电商网站的功能有哪些百度广州分公司容易进吗
  • 网络管理系统中管理对象什么是优化型网站
  • 代做cad平面图的网站网店代运营被骗怎么追回
  • 网站开发需求方案什么是网络营销的综合性工具
  • html5技术可以制作网站吗部门将网站建设的需求
  • 关于港口码头发展建设的网站手机单页网站通用模板
  • 网站海外推广建设成都环境建设网站
  • win2003 iis配置网站怎么学做淘宝电商网站
  • 网站优化是什么yy简历网
  • 完整网站建设教程做响应式网站最大宽度
  • 西安做北郊做网站长沙申请域名网站备案
  • 百度信息流网站可以做落地页吗泰安信息平台体温
  • 莱州网站建设服务互联网站备案登记表
  • 怎么更换网站图片网站开发用什么框架合适
  • 大连网站建设方法网站 刷流量
  • 服务专业的网站制作服务网站上怎么做动画广告视频在线观看
  • 如何做网站赚钱wordpress配置主题
  • 百度不收录网站有趣的网站大全
  • 微信网站制作教程杭州协会网站建设
  • 谷歌网站推广销售wordpress 运行速度慢
  • 找人做网站 自己购买服务器晋江论坛怎么发图
  • 各大招聘网站做会计题目的网站
  • 展览馆网站建设方案书网站建设与网页制作技术
  • 网站开发外贸客户石家庄做外贸的网站
  • 做网站时分类标题和分类描述公司名字大全集