// Copyright 2021 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; import "google/api/annotations.proto"; import "google/api/client.proto"; import "google/cloud/extended_operations.proto"; package google.showcase.v1beta1; option go_package = "github.com/googleapis/gapic-showcase/server/genproto"; option java_package = "com.google.showcase.v1beta1"; option java_multiple_files = true; // This service is used to test that GAPICs can transcode proto3 requests to // REST format correctly for various types of HTTP annotations. service Compliance { // This service is meant to only run locally on the port 7469 (keypad digits // for "show"). option (google.api.default_host) = "localhost:7469"; // This method echoes the ComplianceData request. This method exercises // sending the entire request object in the REST body. rpc RepeatDataBody(RepeatRequest) returns (RepeatResponse) { option (google.api.http) = { post: "/v1beta1/repeat:body" body: "*" }; } // This method echoes the ComplianceData request. This method exercises // sending the a message-type field in the REST body. Per AIP-127, only // top-level, non-repeated fields can be sent this way. rpc RepeatDataBodyInfo(RepeatRequest) returns (RepeatResponse) { option (google.api.http) = { post: "/v1beta1/repeat:bodyinfo" body: "info" }; } // This method echoes the ComplianceData request. This method exercises // sending all request fields as query parameters. rpc RepeatDataQuery(RepeatRequest) returns (RepeatResponse) { option (google.api.http) = { get: "/v1beta1/repeat:query" }; } // This method echoes the ComplianceData request. This method exercises // sending some parameters as "simple" path variables (i.e., of the form // "/bar/{foo}" rather than "/{foo=bar/*}"), and the rest as query parameters. rpc RepeatDataSimplePath(RepeatRequest) returns (RepeatResponse) { option (google.api.http) = { get: "/v1beta1/repeat/{info.f_string}/{info.f_int32}/{info.f_double}/{info.f_bool}/{info.f_kingdom}:simplepath" }; } // Same as RepeatDataSimplePath, but with a path resource. rpc RepeatDataPathResource(RepeatRequest) returns (RepeatResponse) { option (google.api.http) = { get: "/v1beta1/repeat/{info.f_string=first/*}/{info.f_child.f_string=second/*}/bool/{info.f_bool}:pathresource" }; } // Same as RepeatDataSimplePath, but with a trailing resource. rpc RepeatDataPathTrailingResource(RepeatRequest) returns (RepeatResponse) { option (google.api.http) = { get: "/v1beta1/repeat/{info.f_string=first/*}/{info.f_child.f_string=second/**}:pathtrailingresource" }; } // This method requests an enum value from the server. Depending on the contents of EnumRequest, the enum value returned will be a known enum declared in the // .proto file, or a made-up enum value the is unknown to the client. To verify that clients can round-trip unknown enum vaues they receive, use the // response from this RPC as the request to VerifyEnum() // // The values of enums sent by the server when a known or unknown value is requested will be the same within a single Showcase server run (this is needed for // VerifyEnum() to work) but are not guaranteed to be the same across separate Showcase server runs. rpc GetEnum(EnumRequest) returns (EnumResponse) { option (google.api.http) = { get: "/v1beta1/compliance/enum" }; } // This method is used to verify that clients can round-trip enum values, which is particularly important for unknown enum values over REST. VerifyEnum() // verifies that its request, which is presumably the response that the client previously got to a GetEnum(), contains the correct data. If so, it responds // with the same EnumResponse; otherwise, the RPC errors. // // This works because the values of enums sent by the server when a known or unknown value is requested will be the same within a single Showcase server run, // although they are not guaranteed to be the same across separate Showcase server runs. rpc VerifyEnum(EnumResponse) returns (EnumResponse) { option (google.api.http) = { post: "/v1beta1/compliance/enum" }; } } message EnumRequest { // Whether the client is requesting a new, unknown enum value or a known enum value already declard in this proto file. bool unknown_enum = 1; } message EnumResponse { // The original request for a known or unknown enum from the server. EnumRequest request = 1; // The actual enum the server provided. Continent continent = 2; } message RepeatRequest { string name = 1; ComplianceData info = 2; // If true, the server will verify that the received request matches // the request with the same name in the compliance test suite. bool server_verify = 3; } message RepeatResponse { ComplianceData info = 1; } // ComplianceSuite contains a set of requests that microgenerators should issue // over REST to the Compliance service to test their gRPC-to-REST transcoding // implementation. message ComplianceSuite { repeated ComplianceGroup group = 1; } // ComplianceGroups encapsulates a group of RPC requests to the Compliance // server: one request for each combination of elements of `rpcs` and of // `requests`. message ComplianceGroup { string name = 1; repeated string rpcs = 2; repeated RepeatRequest requests = 3; } // ComplianceData is a message used for testing REST transcoding of // different data types. message ComplianceData { enum LifeKingdom { LIFE_KINGDOM_UNSPECIFIED = 0; ARCHAEBACTERIA = 1; EUBACTERIA = 2; PROTISTA = 3; FUNGI = 4; PLANTAE = 5; ANIMALIA = 6; } // scalar types string f_string = 1; int32 f_int32 = 2; sint32 f_sint32 = 3; sfixed32 f_sfixed32 = 4; uint32 f_uint32 = 5; fixed32 f_fixed32 = 6; int64 f_int64 = 7; sint64 f_sint64 = 8; sfixed64 f_sfixed64 = 9; uint64 f_uint64 = 10; fixed64 f_fixed64 = 11; double f_double = 12; float f_float = 13; optional bool f_bool = 14; bytes f_bytes = 15; LifeKingdom f_kingdom = 22; ComplianceDataChild f_child = 16; // optional fields optional string p_string = 17; optional int32 p_int32 = 18; optional double p_double = 19; optional bool p_bool = 20; optional LifeKingdom p_kingdom = 23; optional ComplianceDataChild p_child = 21; } message ComplianceDataChild { string f_string = 1; float f_float = 2; double f_double = 3; bool f_bool = 4; Continent f_continent = 11; ComplianceDataGrandchild f_child = 5; optional string p_string = 6; optional float p_float = 7; optional double p_double = 8; optional bool p_bool = 9; Continent p_continent = 12; optional ComplianceDataGrandchild p_child = 10; } message ComplianceDataGrandchild { string f_string = 1; double f_double = 2; bool f_bool = 3; } enum Continent { CONTINENT_UNSPECIFIED = 0; AFRICA = 1; AMERICA = 2; ANTARTICA = 3; AUSTRALIA = 4; EUROPE = 5; }