pbgo: 基于Protobuf的rpc/rest迷你框架

https://github.com/chai2010/pbgo

基于pb生成rest代码

已邀请:

chai2010 - 数盲患者

赞同来自: thinkboy

简单一个REST服务的过程

第一步: 创建 Protobuf 文件 并生成代码

底层采用 httprouter 处理路由

syntax = "proto3";
package hello_pb;

import "github.com/chai2010/pbgo/pbgo.proto";

message String {
    string value = 1;
}

service EchoService {
    rpc Echo (String) returns (String) {
        option (pbgo.rest_api) = {
            get: "/echo/:value"
        };
    }
}
$ protoc -I=. -I=$(GOPATH)/src --pbgo_out=. hello.proto

第二步 构建REST服务

构造REST服务和RPC的风格类似:

type EchoService struct{}

func (p *EchoService) Echo(request *hello_pb.String, reply *hello_pb.String) error {
    *reply = *request
    return nil
}

func main() {
    router := hello_pb.EchoServiceHandler(new(EchoService))
    log.Fatal(http.ListenAndServe(":8080", router))
}

支持路径参数和查询参数

$ curl localhost:8080/echo/gopher
{"value":"gopher"}

$ curl localhost:8080/echo/gopher?value=cgo
{"value":"cgo"}

pbgo 还支持返回原生数据的方式。更多用法请参考 hello.proto

要回复问题请先登录注册