-
Notifications
You must be signed in to change notification settings - Fork 673
Description
Currently, the operationId is generated as a combination of controller name and action:
public static string FriendlyId(this ApiDescription apiDescription)
{
return String.Format("{0}_{1}",
apiDescription.ActionDescriptor.ControllerDescriptor.ControllerName,
apiDescription.ActionDescriptor.ActionName);
}
In certain scenarios (e.g. overloading the action name for different routes) this can result in the same operationId for multiple operations, thus breaking the Swagger 2.0 constraint that operation Id's must be unique within a Swagger document.
The obvious solution would be to instead use a combination of HTTP method and route template. However, this presents a challenge related to the second Swagger 2.0 constraint - namely that operationId should be "friendly" as it MAY be used as a method name in auto-generated clients. For example, the following would not be possible in a JavaScript client:
swaggeClient.pets.GET_pets/{id}
The following would be preferable:
swaggerClient.pets.GetPetById
So, we need to come up with a deterministic (consider complex, nested routes) approach for generating an operationId that is both "unique" and "friendly".
Suggestions welcome?