REST is a combination of things. A RESTful API should allow a client to get, post, put and delete any number of resources while following a set of constraints. The request usually contains a resource id, and the response should give enough information for the client to take the next step and update the resource (like a link to a put post). The client and server are obviously separated and the server is not aware of the client other than waiting for requests and returning the appropriate response. Responses that are served are stateless, so they are independent of each other, and as long as the data has not change, will always send the same response. The server has no memory of the requests made. The server should give information about whether or not the data is cachable and when it expires, s the client does not need to keep requesting the same data. GET: Retrieves data from the server (should only retrieve data and should have no other effect).
POST: Sends data to the server for a new entity. It is often used when uploading a file or submitting a completed web form.
PUT: Similar to POST, but used to replace an existing entity.
PATCH: Similar to PUT, but used to update only certain fields within an existing entity.
DELETE: Removes data from the server.
TRACE: Provides a means to test what a machine along the network path receives when a request is made. As such, it simply returns what was sent.
OPTIONS: Allows a client to request information about the request methods supported by a service. The relevant response header is Allow and it simply lists the supported methods. (It can also be used to request information about the request methods supported for the server where the service resides by using a * wildcard in the URI.)
HEAD: Same as the GET method for a resource, but returns only the response headers (i.e., with no entity-body).
CONNECT: Primarily used to establish a network connection to a resource (usually via some proxy that can be requested to forward an HTTP request as TCP and maintain the connection). Once established, the response sends a 200 status code and a "Connection Established" message.