如何形成 http 请求主体的 protobuf 资源部分并通过 dhc 客户端或邮递员测试 restful 服务

How to form protobuf resource part of http request body and test it through dhc client or postman for restful services

我创建了一个 .proto 消息,并且公开了一个如下所示的休息服务

@Path("/test")
public interface test{

@POST
@Produces("application/x-protobuf")
@Consumes("application/x-protobuf")
public Response getProperties(TestRequest testrq);
}

现在 TestRequest 是 Java 生成的 .protobuf 文件,我如何在请求正文中传递它?

这将是 .proto 文件格式

message TestRequest
{
    string id = 1;
    string name = 2;
    enum TestType
    {
        Test=1
    }
   TestType testType = 3; 
}

您可以使用此代码片段来测试 protobuf,因为我没有找到 postman 或 dhcclient 的任何解决方案

URL url = new URL("https://localhost:8080/test");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setDoInput(true);
urlc.setDoOutput(true);
urlc.setRequestMethod("POST");
urlc.setRequestProperty("Accept", "application/x-protobuf");
urlc.setRequestProperty("Content-Type","application/x-protobuf");
TestRequestPb.TestRequest.Builder testRequestBuilder = TestRequestPb.TestRequest.newBuilder();
TestRequest testRequest = testRequestBuilder.build();
testRequest.writeTo(urlc.getOutputStream());

testRequest = TestRequest.newBuilder().mergeFrom(urlc.getInputStream()).build();

如果您需要一个简单的 protobuf api 客户端,请尝试 Protoman

免责声明:这是我的副业

您可以使用protoCURL, a command line tool, to send Protobuf payloads to your HTTP REST endpoints and debug it. It works just like with cURL - except that you can use the Protobuf text format或JSON格式来描述您的请求,它会被自动编码和解码。由于接受的答案实际上并没有使用 postman 或 dhc 客户端,我认为 CLI 对于您或其他读者来说可能是可以接受的。

在您的情况下,请求将如下所示:

protocurl -I path/to/proto -i ..TestRequest -o ..TestResponse \
  -u http://localhost:8080/test \
  -d "id: 'myid', name: 'myname', testType: Test"

假设您的 .proto 文件位于文件夹 path/to/proto.

但是,由于您的.proto 文件没有指定响应类型TestResponse,因此无法显示它。您需要向 .proto 文件添加响应消息。然而,即使没有其消息架构,也有一个 open issue 用于显示响应。

你可以找到examples for outputs in the repository.

免责声明:我是这个的创造者并制作了它,因为我遇到了同样的问题。