RESTFULL JSON API

GRPC

举一个例子,接口定义如下:

message SayHelloRequest {
    string stringValue = 1;
    int64 int64Value = 2;
}

message SayHelloResponse {
    string message = 1;
}

service TestService {
    rpc sayHello (SayHelloRequest) returns (SayHelloResponse) {}
}

protobuf生成的struct代码为:

type SayHelloRequest struct {
       StringValue  string        `protobuf:"bytes,2,opt,name=stringValue" json:"stringValue,omitempty"`
       Int64Value   int64         `protobuf:"varint,3,opt,name=int64Value" json:"int64Value,omitempty"`
}

参考 如何添加新API,实现该接口。

接下来启动服务,发起POST请求(Content-Type=application/json),body数据为:

{
       "stringValue":"a string value",
       "int64Value":1234
}

注意: json中的key的名字, 必须 与protobuf生成struct中对应变量的 tag “protobuf”里的name参数的值相同,比如”stringValue”。

在你实现的grpc server端接口中,应该能够读取到body中的数据。

Thrift

举相同的例子:

struct SayHelloRequest {
  1: string stringValue,
  2: i32 int32Value,
  3: bool boolValue,
}

struct SayHelloResponse {
  1: string message,
}

service TestService {
    SayHelloResponse testJson (1:SayHelloRequest request)
}

thrift生成的struct代码:

type TestJsonRequest struct {
  StringValue string `thrift:"stringValue,1" db:"stringValue" json:"stringValue"`
  Int32Value int32 `thrift:"int32Value,2" db:"int32Value" json:"int32Value"`
  BoolValue bool `thrift:"boolValue,3" db:"boolValue" json:"boolValue"`
}

参考 如何添加新API,实现该接口。

接下来启动服务,发起POST请求(Content-Type=application/json),body数据为:

{
       "StringValue":"a string value",
       "int32Value":1234,
       "boolvalue":true
}

注意: 与grpc不同,通过thrift发出的json请求数据的key是大小写不敏感的。

在你实现的thrift server端接口中,应该能够读取到body中的数据。