protoc-gen-pocket-extensions is a protobuf protoc plugin which allows generating source code extensions for services built with pocket framework. It also provides an option to generate API documenation for services using special proto annotations.
In order to build the plugin, its protobuf annotation extensions must be compiled into Go sources. This can be achieved by running the following command:
go generate ./options/pocket
After successfully generated them, the plugin can be built and installed, locally, by using the command:
go build && go install
- Extended generated source code for pocket services, using proto annotations;
- Generates OpenAPI 3.0.3 spec files (YAML format).
In order to use annotations to extend a pocket service, the file pocket.proto must be imported inside the desired protobuf spec file and the service must be named using one of its custom annotations. Like the example:
syntax = "proto3";
package service.example.v1;
import "protoc-gen-pocket-extensions/options/pocket/pocket.proto";
// Defines the service name
option (pocket.service.app_name) = "example";
service ExampleService {
rpc ...
}
The pocket framework handles creating an HTTP server service using a protobuf spec file by declaring all its endpoints (and which internal functions (RPC) will handle them) and their API contracts using proto annotations.
Example:
syntax = "proto3";
package service.example_resource.v1;
import "protoc-gen-pocket-extensions/options/pocket/pocket.proto";
import "protoc-gen-pocket-extensions/options/pocket/pocket_openapi.proto";
import "protoc-gen-pocket-extensions/options/pocket/pocket_http.proto";
// Sets the service name.
option (pocket.service.app_name) = "example-resource";
// Sets main OpenAPI information
option (pocket.openapi.title) = "example-resource";
option (pocket.openapi.version) = "0.1.0";
service ExampleService {
// Sets the service authentication mode.
option (pocket.http.service_definitions) = {
security_scheme: {
type: HTTP_SECURITY_SCHEME_HTTP
scheme: HTTP_SECURITY_SCHEME_SCHEME_BEARER
}
};
rpc GetExample(GetExampleRequest) returns (GetExampleResponse) {
// Sets a GET endpoint for the service
option (google.api.http) = {
get: "/example-resource/v1/examples"
};
// Sets all possible status code returned by the endpoint
option (pocket.openapi.operation) = {
summary: "A brief summary of the endpoint."
description: "Some more details of what the endpoint does."
response: {
code: RESPONSE_CODE_OK
description: "Success."
}
response: {
code: RESPONSE_CODE_BAD_REQUEST
description: "A bad request."
}
response: {
code: RESPONSE_CODE_UNAUTHORIZED
description: "An unauthorized request."
}
response: {
code: RESPONSE_CODE_INTERNAL_ERROR
description: "An internal error occurred."
}
};
};
}
message GetExampleRequest {
...
}
message GetExampleResponse {
...
}
Apache 2.0