123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- // Copyright 2019 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
- //
- // http://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";
- package google.example.library.v1;
- import "google/api/annotations.proto";
- import "google/api/client.proto";
- import "google/api/field_behavior.proto";
- import "google/api/resource.proto";
- import "google/protobuf/empty.proto";
- import "google/protobuf/field_mask.proto";
- option go_package = "google.golang.org/genproto/googleapis/example/library/v1;library";
- option java_multiple_files = true;
- option java_outer_classname = "LibraryProto";
- option java_package = "com.google.example.library.v1";
- option php_namespace = "Google\\Cloud\\Example\\Library\\V1";
- // This API represents a simple digital library. It lets you manage Shelf
- // resources and Book resources in the library. It defines the following
- // resource model:
- //
- // - The API has a collection of [Shelf][google.example.library.v1.Shelf]
- // resources, named `shelves/*`
- //
- // - Each Shelf has a collection of [Book][google.example.library.v1.Book]
- // resources, named `shelves/*/books/*`
- service LibraryService {
- option (google.api.default_host) = "library-example.googleapis.com";
- // Creates a shelf, and returns the new Shelf.
- rpc CreateShelf(CreateShelfRequest) returns (Shelf) {
- option (google.api.http) = {
- post: "/v1/shelves"
- body: "shelf"
- };
- option (google.api.method_signature) = "shelf";
- }
- // Gets a shelf. Returns NOT_FOUND if the shelf does not exist.
- rpc GetShelf(GetShelfRequest) returns (Shelf) {
- option (google.api.http) = {
- get: "/v1/{name=shelves/*}"
- };
- option (google.api.method_signature) = "name";
- }
- // Lists shelves. The order is unspecified but deterministic. Newly created
- // shelves will not necessarily be added to the end of this list.
- rpc ListShelves(ListShelvesRequest) returns (ListShelvesResponse) {
- option (google.api.http) = {
- get: "/v1/shelves"
- };
- }
- // Deletes a shelf. Returns NOT_FOUND if the shelf does not exist.
- rpc DeleteShelf(DeleteShelfRequest) returns (google.protobuf.Empty) {
- option (google.api.http) = {
- delete: "/v1/{name=shelves/*}"
- };
- option (google.api.method_signature) = "name";
- }
- // Merges two shelves by adding all books from the shelf named
- // `other_shelf_name` to shelf `name`, and deletes
- // `other_shelf_name`. Returns the updated shelf.
- // The book ids of the moved books may not be the same as the original books.
- //
- // Returns NOT_FOUND if either shelf does not exist.
- // This call is a no-op if the specified shelves are the same.
- rpc MergeShelves(MergeShelvesRequest) returns (Shelf) {
- option (google.api.http) = {
- post: "/v1/{name=shelves/*}:merge"
- body: "*"
- };
- option (google.api.method_signature) = "name,other_shelf";
- }
- // Creates a book, and returns the new Book.
- rpc CreateBook(CreateBookRequest) returns (Book) {
- option (google.api.http) = {
- post: "/v1/{parent=shelves/*}/books"
- body: "book"
- };
- option (google.api.method_signature) = "parent,book";
- }
- // Gets a book. Returns NOT_FOUND if the book does not exist.
- rpc GetBook(GetBookRequest) returns (Book) {
- option (google.api.http) = {
- get: "/v1/{name=shelves/*/books/*}"
- };
- option (google.api.method_signature) = "name";
- }
- // Lists books in a shelf. The order is unspecified but deterministic. Newly
- // created books will not necessarily be added to the end of this list.
- // Returns NOT_FOUND if the shelf does not exist.
- rpc ListBooks(ListBooksRequest) returns (ListBooksResponse) {
- option (google.api.http) = {
- get: "/v1/{parent=shelves/*}/books"
- };
- option (google.api.method_signature) = "parent";
- }
- // Deletes a book. Returns NOT_FOUND if the book does not exist.
- rpc DeleteBook(DeleteBookRequest) returns (google.protobuf.Empty) {
- option (google.api.http) = {
- delete: "/v1/{name=shelves/*/books/*}"
- };
- option (google.api.method_signature) = "name";
- }
- // Updates a book. Returns INVALID_ARGUMENT if the name of the book
- // is non-empty and does not equal the existing name.
- rpc UpdateBook(UpdateBookRequest) returns (Book) {
- option (google.api.http) = {
- patch: "/v1/{book.name=shelves/*/books/*}"
- body: "book"
- };
- option (google.api.method_signature) = "book,update_mask";
- }
- // Moves a book to another shelf, and returns the new book. The book
- // id of the new book may not be the same as the original book.
- rpc MoveBook(MoveBookRequest) returns (Book) {
- option (google.api.http) = {
- post: "/v1/{name=shelves/*/books/*}:move"
- body: "*"
- };
- option (google.api.method_signature) = "name,other_shelf_name";
- }
- }
- // A single book in the library.
- message Book {
- option (google.api.resource) = {
- type: "library-example.googleapis.com/Book",
- pattern: "shelves/{shelf}/books/{book}"
- };
- // The resource name of the book.
- // Book names have the form `shelves/{shelf_id}/books/{book_id}`.
- // The name is ignored when creating a book.
- string name = 1;
- // The name of the book author.
- string author = 2;
- // The title of the book.
- string title = 3;
- // Value indicating whether the book has been read.
- bool read = 4;
- }
- // A Shelf contains a collection of books with a theme.
- message Shelf {
- option (google.api.resource) = {
- type: "library-example.googleapis.com/Shelf",
- pattern: "shelves/{shelf_id}"
- };
- // The resource name of the shelf.
- // Shelf names have the form `shelves/{shelf_id}`.
- // The name is ignored when creating a shelf.
- string name = 1;
- // The theme of the shelf
- string theme = 2;
- }
- // Request message for LibraryService.CreateShelf.
- message CreateShelfRequest {
- // The shelf to create.
- Shelf shelf = 1 [(google.api.field_behavior) = REQUIRED];
- }
- // Request message for LibraryService.GetShelf.
- message GetShelfRequest {
- // The name of the shelf to retrieve.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference).type =
- "library-example.googleapis.com/Shelf"
- ];
- }
- // Request message for LibraryService.ListShelves.
- message ListShelvesRequest {
- // Requested page size. Server may return fewer shelves than requested.
- // If unspecified, server will pick an appropriate default.
- int32 page_size = 1;
- // A token identifying a page of results the server should return.
- // Typically, this is the value of
- // [ListShelvesResponse.next_page_token][google.example.library.v1.ListShelvesResponse.next_page_token]
- // returned from the previous call to `ListShelves` method.
- string page_token = 2;
- }
- // Response message for LibraryService.ListShelves.
- message ListShelvesResponse {
- // The list of shelves.
- repeated Shelf shelves = 1;
- // A token to retrieve next page of results.
- // Pass this value in the
- // [ListShelvesRequest.page_token][google.example.library.v1.ListShelvesRequest.page_token]
- // field in the subsequent call to `ListShelves` method to retrieve the next
- // page of results.
- string next_page_token = 2;
- }
- // Request message for LibraryService.DeleteShelf.
- message DeleteShelfRequest {
- // The name of the shelf to delete.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference).type =
- "library-example.googleapis.com/Shelf"
- ];
- }
- // Describes the shelf being removed (other_shelf_name) and updated
- // (name) in this merge.
- message MergeShelvesRequest {
- // The name of the shelf we're adding books to.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference).type =
- "library-example.googleapis.com/Shelf"
- ];
- // The name of the shelf we're removing books from and deleting.
- string other_shelf = 2 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference).type =
- "library-example.googleapis.com/Shelf"
- ];
- }
- // Request message for LibraryService.CreateBook.
- message CreateBookRequest {
- // The name of the shelf in which the book is created.
- string parent = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference).type =
- "library-example.googleapis.com/Shelf"
- ];
- // The book to create.
- Book book = 2 [(google.api.field_behavior) = REQUIRED];
- }
- // Request message for LibraryService.GetBook.
- message GetBookRequest {
- // The name of the book to retrieve.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference).type = "library-example.googleapis.com/Book"
- ];
- }
- // Request message for LibraryService.ListBooks.
- message ListBooksRequest {
- // The name of the shelf whose books we'd like to list.
- string parent = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference).type =
- "library-example.googleapis.com/Shelf"
- ];
- // Requested page size. Server may return fewer books than requested.
- // If unspecified, server will pick an appropriate default.
- int32 page_size = 2;
- // A token identifying a page of results the server should return.
- // Typically, this is the value of
- // [ListBooksResponse.next_page_token][google.example.library.v1.ListBooksResponse.next_page_token].
- // returned from the previous call to `ListBooks` method.
- string page_token = 3;
- }
- // Response message for LibraryService.ListBooks.
- message ListBooksResponse {
- // The list of books.
- repeated Book books = 1;
- // A token to retrieve next page of results.
- // Pass this value in the
- // [ListBooksRequest.page_token][google.example.library.v1.ListBooksRequest.page_token]
- // field in the subsequent call to `ListBooks` method to retrieve the next
- // page of results.
- string next_page_token = 2;
- }
- // Request message for LibraryService.UpdateBook.
- message UpdateBookRequest {
- // The name of the book to update.
- Book book = 1 [(google.api.field_behavior) = REQUIRED];
- // Required. Mask of fields to update.
- google.protobuf.FieldMask update_mask = 2
- [(google.api.field_behavior) = REQUIRED];
- }
- // Request message for LibraryService.DeleteBook.
- message DeleteBookRequest {
- // The name of the book to delete.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference).type = "library-example.googleapis.com/Book"
- ];
- }
- // Describes what book to move (name) and what shelf we're moving it
- // to (other_shelf_name).
- message MoveBookRequest {
- // The name of the book to move.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference).type = "library-example.googleapis.com/Book"
- ];
- // The name of the destination shelf.
- string other_shelf_name = 2 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference).type =
- "library-example.googleapis.com/Shelf"
- ];
- }
|