# rpc-naming

Source: https://apigenie.pl/docs/linter/protobuf/rules/rpc-naming

This rule checks whether the name of every RPC of a Protobuf file is in `PascalCase`.

## Rule Details

RPC names become method names in the generated code and appear in the paths of gRPC requests
(`/acme.pets.v1.PetService/GetPet`). PascalCase is what the Protobuf style guide recommends, and
the `rpc-request-standard-name` and `rpc-response-standard-name` rules derive the names of the
request and response types from them.

The `rpc-naming` rule checks every RPC of every service, and reports `RPC name '<name>' should
be PascalCase` for every name that is not in `PascalCase`. A name is in `PascalCase` when it
starts with an upper-case letter and contains only letters and digits, such as `PetOwner`
(acronyms such as `HTTPServer` are accepted).

When the name converted to `PascalCase` differs from the original and is itself valid, the
message ends with a suggestion, for example `, e.g. '<converted>'`. To convert a name, it is
split into words at underscores and other separators, at lower-to-upper case changes and before
the last capital of an acronym, and the words are capitalized and joined, so `pet_owner` becomes
`PetOwner`.

## Configuration

This rule has no options.

## Examples

**Good**.

```proto
syntax = "proto3";

package acme.pets.v1;

service PetService {
  rpc GetPet(GetPetRequest) returns (GetPetResponse);
}

message GetPetRequest {
  string name = 1;
}

message GetPetResponse {
  string name = 1;
}
```

**Bad**. The linter reports `RPC name 'get_pet' should be PascalCase, e.g. 'GetPet'`.

```proto
syntax = "proto3";

package acme.pets.v1;

service PetService {
  rpc get_pet(GetPetRequest) returns (GetPetResponse);
}

message GetPetRequest {
  string name = 1;
}

message GetPetResponse {
  string name = 1;
}
```

## When Not to Use It

You may disable this rule if the names are part of an existing API that you cannot rename. To
allow a single RPC, add an `// apigenie-lint-disable rpc-naming` comment to it.

## Compatibility

This rule is compatible with proto3 files. proto2 and editions files are rejected by the reader
and are not linted.
