После выполнения Развертывание конфигурации конечных точек Я успешно развернул скомпилированный файл .proto
и файл конфигурации gRP C API.
Отлично. Я решил быть хорошим гражданином и использовать API Google Linter на моем .proto
.
. Это привело к ряду рекомендаций, включающих различные аннотации. Требуются новые аннотации proto
импорт;
До
syntax = "proto3";
package api.v1;
// Request message for Get method.
message GetFooRequest {
// The field will contain name of the resource requested.
string name = 1;
}
...blah,blah
После
syntax = "proto3";
package api.v1;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
// Request message for Get method.
message GetFooRequest {
// The field will contain name of the resource requested.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference).type = "api.v1.HelloWorld/Foo"
];
}
...blah,blah
Аннотации требуют четыре новых прото-файла для импорта:
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
Все они являются частью протоколов общего API Google protos, поэтому я клонировал репо в /Users/Jack/api-common-protos/
с помощью:
git clone https://github.com/googleapis/api-common-protos.git
... и включите его при компиляции моего .proto
файла:
python3 -m grpc_tools.protoc --proto_path=api
--proto_path=/Users/Jack/api-common-protos/google
api/v1/foo.proto
Нет ошибок. Отлично. Наконец, я развернул API:
gcloud endpoints services deploy api_descriptor.pb api-config.yaml
Это завершено. Однако на портале для разработчиков теперь отображается:
We encountered the following errors while processing this API specification:
API parse error: Error: ENOENT: no such file or directory, open '/tmp/google/api/client.proto'
Please correct these errors and try again.
Scrot:
Если удалить аннотацию (и требуемый импорт) , Портал разработчика конечных точек для моего API работает нормально.