== HTTP Paths

Where possible, each v2 API is given an HTTP path that reflects the resource type and/or name most relevant to its functionality.
Resource types are typically plural nouns such as "aliases", "collections", and "shards".
Resource names are (typically user-provided) identifiers such as "myAlias", "techproducts", and "shard1".
For example, `/api/collections` is the HTTP path used for all APIs concerned with collections generally, but that don't involve any one specific collection (e.g. listing all collections).
APIs that concern themselves with a specific collection use the HTTP path `/api/collections/someCollectionName`.


Resource types and names are arranged in the HTTP path such that each path segment is more specific, or "narrower", than the segment that came before.
This "narrowing" also extends to resources that have an "is part of" or "contains" relationship to one another.
In these cases all relevant resources and their types are included in the path, with the "contained" or "child" resource following its "parent".
For example, since replicas always belong to a shard, and shards always belong to a collection, most v2 APIs pertaining to a specific replica use the HTTP path: `/api/collections/specificCollectionName/shards/specificShardName/replicas/specificReplicaName`.

Following these guidelines has given us the following (non-exhaustive) list of v2 API paths, provided here to give a good sense of the paths currently in use and the logic underlying them.
* `/api/aliases`
* `/api/aliases/specificAliasName`
* `/api/aliases/specificAliasName/properties`
* `/api/aliases/specificAliasName/properties/specificPropertyName`
* `/api/backups/specificBackupName`
* `/api/backups/specificBackupName/versions`
* `/api/backups/specificBackupName/versions/specificVersion`
* `/api/cluster/nodes/specificNodeName/roles`
* `/api/cluster/nodes/specificNodeName/roles/specificRoleName`
* `/api/cluster/properties`
* `/api/cluster/properties/specificPropertyName`
* `/api/collections`
* `/api/collections/specificCollName`
* `/api/collections/specificCollName/properties`
* `/api/collections/specificCollName/properties/specificPropertyName`
* `/api/collections/specificcollName/shards`
* `/api/collections/specificCollName/shards/specificShardName`
* `/api/collections/specificCollName/shards/specificShardName/replicas`
* `/api/collections/specificCollName/shards/specificShardName/replicas/specificReplicaName`
* `/api/collections/specificCollName/shards/specificShardName/replicas/specificReplicaName/properties`
* `/api/collections/specificCollName/shards/specificShardName/replicas/specificReplicaName/properties/specificPropertyName`
* `/api/configsets`
* `/api/configsets/specificConfigsetName`
* `/api/cores`
* `/api/cores/specificCoreName`
* `/api/node`

=== Unproxied APIs

The last entry on the list above, `/api/node`, exhibits a bit of a special case.
SolrCloud handles most requests as a distributed system, i.e. any request can be made to any node in the cluster and Solr will proxy or route the request internally in order to serve a response.
But not all APIs work this way- some functionality is designed to only return data from the receiving node, such as `/api/node/key` which returns a cryptographic key specific to the receiving node.
Solr will not proxy these requests.
To represent this distinction the API design uses the idiosyncratic path `/api/node`, to help distinguish these from other node-related APIs.

== HTTP Methods 

Where possible, HTTP methods (colloquially called 'verbs') are used semantically to distinguish between APIs available at the same path.
For example, the API to delete a collection uses the `DELETE` HTTP method, as in `DELETE /api/collections/specificCollectionName`.
The API to modify the collection uses the `PUT` HTTP method, as in `PUT /api/collections/specificCollectionName`.

While the best effort is made to use HTTP methods semantically, the v2 API currently restricts itself to the better known HTTP methods: `GET`, `POST`, `PUT`, and `DELETE`.
In some situations this leads us to eschew a more semantically appropriate verb due to its relative obscurity.
The most significant example of this is the HTTP method `PATCH`, which according to the HTTP spec is used to indicate a partial update (i.e. a resource modification request which only provides the part to-be-modified).
Solr's "modify collection" functionality uses partial update semantics, but the v2 API uses `PUT` instead of `PATCH` due to the relative obscurity of the latter.

For use within the v2 API, the four "popular" HTTP methods have the following semantics and implications:

* `GET` - used for non-mutating (i.e. "read only") requests. Most often used to list elements of a particular resource type, or fetch information about about a specific named resource.
* `POST` - used for non-idempotent resource modifications.
* `PUT` - used for idempotent resource modifications.
* `DELETE` - Used to delete or cleanup resource

== Exceptional Cases - "Command" APIs

The pairing of semantic HTTP verbs and "resource"-based paths gives Solr an intuitive pattern for representing many operations, but not all.
Many Solr APIs cover complex operations that don't map cleanly to an HTTP verb.
Often these operations were initially conceived of as procedural "commands" and as such are hard to fit into the v2 APIs resource-first model.

Solr's v2 API currently accommodates these "command" APIs by appending the command name (often a verb like "unload", "reload", or "split") onto the otherwise "resource"-based path.
For example: Solr's core "unload" command uses the API `POST /api/cores/specificCoreName/unload`.
