Permalink
Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.
Sign up| syntax = "proto3"; | |
| package v1; | |
| import "google/protobuf/timestamp.proto"; | |
| import "google/api/annotations.proto"; | |
| import "protoc-gen-swagger/options/annotations.proto"; | |
| option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = { | |
| info: { | |
| title: "ToDo service"; | |
| version: "1.0"; | |
| contact: { | |
| name: "go-grpc-http-rest-microservice-tutorial project"; | |
| url: "https://github.com/amsokol/go-grpc-http-rest-microservice-tutorial"; | |
| email: "medium@amsokol.com"; | |
| }; | |
| }; | |
| schemes: HTTP; | |
| consumes: "application/json"; | |
| produces: "application/json"; | |
| responses: { | |
| key: "404"; | |
| value: { | |
| description: "Returned when the resource does not exist."; | |
| schema: { | |
| json_schema: { | |
| type: STRING; | |
| } | |
| } | |
| } | |
| } | |
| }; | |
| // Task we have to do | |
| message ToDo { | |
| // Unique integer identifier of the todo task | |
| int64 id = 1; | |
| // Title of the task | |
| string title = 2; | |
| // Detail description of the todo task | |
| string description = 3; | |
| // Date and time to remind the todo task | |
| google.protobuf.Timestamp reminder = 4; | |
| } | |
| // Request data to create new todo task | |
| message CreateRequest{ | |
| // API versioning: it is my best practice to specify version explicitly | |
| string api = 1; | |
| // Task entity to add | |
| ToDo toDo = 2; | |
| } | |
| // Contains data of created todo task | |
| message CreateResponse{ | |
| // API versioning: it is my best practice to specify version explicitly | |
| string api = 1; | |
| // ID of created task | |
| int64 id = 2; | |
| } | |
| // Request data to read todo task | |
| message ReadRequest{ | |
| // API versioning: it is my best practice to specify version explicitly | |
| string api = 1; | |
| // Unique integer identifier of the todo task | |
| int64 id = 2; | |
| } | |
| // Contains todo task data specified in by ID request | |
| message ReadResponse{ | |
| // API versioning: it is my best practice to specify version explicitly | |
| string api = 1; | |
| // Task entity read by ID | |
| ToDo toDo = 2; | |
| } | |
| // Request data to update todo task | |
| message UpdateRequest{ | |
| // API versioning: it is my best practice to specify version explicitly | |
| string api = 1; | |
| // Task entity to update | |
| ToDo toDo = 2; | |
| } | |
| // Contains status of update operation | |
| message UpdateResponse{ | |
| // API versioning: it is my best practice to specify version explicitly | |
| string api = 1; | |
| // Contains number of entities have beed updated | |
| // Equals 1 in case of succesfull update | |
| int64 updated = 2; | |
| } | |
| // Request data to delete todo task | |
| message DeleteRequest{ | |
| // API versioning: it is my best practice to specify version explicitly | |
| string api = 1; | |
| // Unique integer identifier of the todo task to delete | |
| int64 id = 2; | |
| } | |
| // Contains status of delete operation | |
| message DeleteResponse{ | |
| // API versioning: it is my best practice to specify version explicitly | |
| string api = 1; | |
| // Contains number of entities have beed deleted | |
| // Equals 1 in case of succesfull delete | |
| int64 deleted = 2; | |
| } | |
| // Request data to read all todo task | |
| message ReadAllRequest{ | |
| // API versioning: it is my best practice to specify version explicitly | |
| string api = 1; | |
| } | |
| // Contains list of all todo tasks | |
| message ReadAllResponse{ | |
| // API versioning: it is my best practice to specify version explicitly | |
| string api = 1; | |
| // List of all todo tasks | |
| repeated ToDo toDos = 2; | |
| } | |
| // Service to manage list of todo tasks | |
| service ToDoService { | |
| // Read all todo tasks | |
| rpc ReadAll(ReadAllRequest) returns (ReadAllResponse){ | |
| option (google.api.http) = { | |
| get: "/v1/todo/all" | |
| }; | |
| } | |
| // Create new todo task | |
| rpc Create(CreateRequest) returns (CreateResponse){ | |
| option (google.api.http) = { | |
| post: "/v1/todo" | |
| body: "*" | |
| }; | |
| } | |
| // Read todo task | |
| rpc Read(ReadRequest) returns (ReadResponse){ | |
| option (google.api.http) = { | |
| get: "/v1/todo/{id}" | |
| }; | |
| } | |
| // Update todo task | |
| rpc Update(UpdateRequest) returns (UpdateResponse){ | |
| option (google.api.http) = { | |
| put: "/v1/todo/{toDo.id}" | |
| body: "*" | |
| additional_bindings { | |
| patch: "/v1/todo/{toDo.id}" | |
| body: "*" | |
| } | |
| }; | |
| } | |
| // Delete todo task | |
| rpc Delete(DeleteRequest) returns (DeleteResponse){ | |
| option (google.api.http) = { | |
| delete: "/v1/todo/{id}" | |
| }; | |
| } | |
| } |