diff --git a/website/source/docs/agent/http.html.markdown b/website/source/docs/agent/http.html.markdown index aeb0537922..69f6fe1311 100644 --- a/website/source/docs/agent/http.html.markdown +++ b/website/source/docs/agent/http.html.markdown @@ -3,96 +3,93 @@ layout: "docs" page_title: "HTTP API" sidebar_current: "docs-agent-http" description: |- - The main interface to Consul is a RESTful HTTP API. The API can be used for CRUD for nodes, services, checks, and configuration. The endpoints are versioned to enable changes without breaking backwards compatibility. + The main interface to Consul is a RESTful HTTP API. The API can be used to perform CRUD operations on nodes, services, checks, configuration, and more. The endpoints are versioned to enable changes without breaking backwards compatibility. --- # HTTP API -The main interface to Consul is a RESTful HTTP API. The API can be -used for CRUD for nodes, services, checks, and configuration. The endpoints are -versioned to enable changes without breaking backwards compatibility. +The main interface to Consul is a RESTful HTTP API. The API can be used to perform CRUD +operations on nodes, services, checks, configuration, and more. The endpoints are versioned +to enable changes without breaking backwards compatibility. -All endpoints fall into one of several categories: +Each endpoint manages a different aspect of Consul: * [kv](http/kv.html) - Key/Value store -* [agent](http/agent.html) - Agent control -* [catalog](http/catalog.html) - Manages nodes and services -* [health](http/health.html) - Manages health checks -* [session](http/session.html) - Session manipulation -* [acl](http/acl.html) - ACL creations and management +* [agent](http/agent.html) - Consul Agent +* [catalog](http/catalog.html) - Modes and services +* [health](http/health.html) - Health checks +* [session](http/session.html) - Sessions +* [acl](http/acl.html) - Access Control Lists * [event](http/event.html) - User Events * [status](http/status.html) - Consul system status * internal - Internal APIs. Purposely undocumented, subject to change. -Each of the categories and their respective endpoints are documented below. +Each of these is documented in detail at the links above. ## Blocking Queries Certain endpoints support a feature called a "blocking query." A blocking query -is used to wait for a change to potentially take place using long polling. +is used to wait for a potential change using long polling. -Queries that support this will mention it specifically, however the use of this -feature is the same for all. If supported, the query will set an HTTP header -"X-Consul-Index". This is an opaque handle that the client will use. +Not all endpoints support blocking, but those that do are clearly designated in the +documentations. Any endpoint that supports blocking will also set the HTTP header +`X-Consul-Index`, a unique identifier representing the current state of this +requested resource. When again requesting this resource, the client can set the `index` +query string parameter to the value of "X-Consul-Index", indicating that it wishes to wait +for any changes subsequent to that index. -To cause a query to block, the query parameters "?wait=\&index=\" are added -to a request. The "?wait=" query parameter limits how long the query will potentially -block for. It not set, it will default to 10 minutes. It can be specified in the form of -"10s" or "5m", which is 10 seconds or 5 minutes respectively. The "?index=" parameter is an -opaque handle, which is used by Consul to detect changes. The "X-Consul-Index" header for a -query provides this value, and can be used to wait for changes since the query was run. +In addition to `index`, endpoints that support blocking will also honor a `wait` +parameter specifying a maximum duration for the blocking request. It not set, it will +default to 10 minutes. This value can be specified in the form of "10s" or "5m" (i.e., +10 seconds or 5 minutes, respectively). -When provided, Consul blocks sending a response until there is an update that -could have cause the output to change, and thus advancing the index. A critical -note is that when the query returns there is **no guarantee** of a change. It is -possible that the timeout was reached, or that there was an idempotent write that -does not affect the result. +A critical note is that the return of a blocking request is **no guarantee** of a change. It +is possible that the timeout was reached or that there was an idempotent write that does +not affect the result of the query. ## Consistency Modes -Most of the read query endpoints support multiple levels of consistency. -These are to provide a tuning knob that clients can be used to find a happy -medium that best matches their needs. +Most of the read query endpoints support multiple levels of consistency. Since no policy will +suit all clients' needs, these consistency modes allow the user to have the ultimate say in +how to balance the trade-offs inherent in a distributed system. The three read modes are: -* default - If not specified, this mode is used. It is strongly consistent - in almost all cases. However, there is a small window in which an new - leader may be elected, and the old leader may service stale values. The - trade off is fast reads, but potentially stale values. This condition is - hard to trigger, and most clients should not need to worry about the stale read. - This only applies to reads, and a split-brain is not possible on writes. +* default - If not specified, the default is strongly consistent in almost all cases. However, + there is a small window in which a new leader may be elected during which the old leader may + service stale values. The trade-off is fast reads but potentially stale values. The condition + resulting in stale reads is hard to trigger, and most clients should not need to worry about + this case. Also, note that this race condition only applies to reads, not writes. * consistent - This mode is strongly consistent without caveats. It requires that a leader verify with a quorum of peers that it is still leader. This - introduces an additional round-trip to all server nodes. The trade off is - always consistent reads, but increased latency due to an extra round trip. - Most clients should not use this unless they cannot tolerate a stale read. + introduces an additional round-trip to all server nodes. The trade-off is + increased latency due to an extra round trip. Most clients should not use this + unless they cannot tolerate a stale read. -* stale - This mode allows any server to service the read, regardless of if - it is the leader. This means reads can be arbitrarily stale, but are generally - within 50 milliseconds of the leader. The trade off is very fast and scalable - reads but values will be stale. This mode allows reads without a leader, meaning - a cluster that is unavailable will still be able to respond. +* stale - This mode allows any server to service the read regardless of if + it is the leader. This means reads can be arbitrarily stale but are generally + consistent to within 50 milliseconds of the leader. The trade-off is very fast and + scalable reads with a higher likelihood of stale values. This mode allows reads without + a leader, meaning a cluster that is unavailable will still be able to respond to queries. -To switch these modes, either the "?stale" or "?consistent" query parameters -are provided. It is an error to provide both. +To switch these modes, either the `stale` or `consistent` query parameters +should be provided on requests. It is an error to provide both. -To support bounding how stale data is, there is an "X-Consul-LastContact" -which is the last time a server was contacted by the leader node in -milliseconds. The "X-Consul-KnownLeader" also indicates if there is a known -leader. These can be used to gauge if a stale read should be used. +To support bounding the acceptable staleness of data, responses provide the `X-Consul-LastContact` +header containing the time in milliseconds that a server was last contacted by the leader node. +The `X-Consul-KnownLeader` header also indicates if there is a known leader. These can be used +by clients to gauge the staleness of a result and take appropriate action. ## Formatted JSON Output -By default, the output of all HTTP API requests return minimized JSON with all -whitespace removed. By adding "?pretty" to the HTTP request URL, -formatted JSON will be returned. +By default, the output of all HTTP API requests is minimized JSON. If the client passes `pretty` +on the query string, formatted JSON will be returned. ## ACLs Several endpoints in Consul use or require ACL tokens to operate. An agent can be configured to use a default token in requests using the `acl_token` configuration option. However, the token can also be specified per-request -by using the "?token=" query parameter. This will take precedence over the +by using the `token` query parameter. This will take precedent over the default token.