You can support this site from as little as $1 a month on Patreon.

The support pays for site hosting and the expansion of this content.

In addition, Patreon Supporters gain access to exclusive online video training courses and ebooks.

Join Now

HTTP Verbs Overview


HTTP GET Verb

  • GET - retrieve data
  • GET verbs can be issued by a browser
    • click on link
    • visit a site
  • GET http://compendiumdev.co.uk/apps/api/mock/reflect
  • Important Headers
    • User-Agent - tells server app type
    • Accept - what format response you prefer

HTTP GET Verb Example

curl https://apichallenges.herokuapp.com/heartbeat ^
-H "accept: application/xml" ^
--proxy 127.0.0.1:8888
GET https://apichallenges.herokuapp.com/heartbeat HTTP/1.1
User-Agent: curl/7.39.0
Host: localhost:4567
Connection: Keep-Alive
accept: application/xml

Common HTTP Status codes in response to a GET

  • 200 - OK, found the url, returned contents
  • 301, 307, 308 - content has moved, new url in location header
  • 404 - url not found
  • 401 - you need to give me authorisation details see WWW-Authenticate header
  • 403 - url probably exists but you are not allowed to access it

HTTP POST Verb

  • POST amend/create from partial information

  • send a 'body' format of content in the 'content-type' header

  • usually used to create or amend data

  • browser will usually send a POST request when submitting a form


HTTP POST Verb Send Example

curl -X POST https://apichallenges.herokuapp.com/lists ^
-H "accept: application/xml" ^
-H content-type:application/json ^
-H "Authorization: Basic dXNlcjpwYXNzd29yZA==" ^
-d "{title:'a list title'}" ^
--proxy 127.0.0.1:8888

HTTP POST Verb Request Example

POST https://apichallenges.herokuapp.com/lists HTTP/1.1
User-Agent: curl/7.39.0
Host: localhost:4567
Connection: Keep-Alive
accept: application/json
content-type: application/json
Authorization: Basic dXNlcjpwYXNzd29yZA==
Content-Length: 22

{title:'a list title'}


HTTP POST Verb Response Example

HTTP/1.1 201 Created
Date: Thu, 17 Aug 2017 12:11:12 GMT
Content-Type: application/json
Location: /lists/f8134dd6-a573-4cf5-a6c6-9d556118ed0b
Server: Jetty(9.4.4.v20170414)
Content-Length: 171

{"lists":[{
"guid":"f8134dd6-a573-4cf5-a6c6-9d556118ed0b",
"title":"a list title",
"description":"",
"createdDate":"2017-08-17-13-11-12",
"amendedDate":"2017-08-17-13-11-12"}]}

Common HTTP Status codes in response to a POST

  • 200 - OK, did whatever I was supposed to
  • 201 - OK created new items
  • 202 - OK, I'll do that later
  • 204 - OK, I have no more information to give you
  • 400 - what? that request made no sense
  • 404 - I can't post to that url it is not found
  • 401 - need authorisation see WWW-Authenticate header
  • 403 - url probably exists but you are not allowed to access it
  • 409 - can't do that, already exists
  • 500 - your request made me crash

HTTP PUT Verb

  • PUT - create or replace from full information

Full information means it should be idempotent - send it again and get exactly the same request

Demo


HTTP PUT Send Example

curl -X PUT https://apichallenges.herokuapp.com/lists ^
-H "Authorization: Basic dXNlcjpwYXNzd29yZA==" ^
--proxy 127.0.0.1:8888 ^
-d @createlistwithput.txt

where createlistwithput.txt file contains

{"title":"title added with put",
"description":"list description",
"guid": "guidcreatedwithput201708171440",
"createdDate": "2017-08-17-14-40-34",
"amendedDate": "2017-08-17-14-40-34"}

HTTP PUT Request Example

PUT https://apichallenges.herokuapp.com/lists HTTP/1.1
User-Agent: curl/7.39.0
Host: localhost:4567
Accept: */*
Connection: Keep-Alive
Authorization: Basic dXNlcjpwYXNzd29yZA==
Content-Length: 180
Content-Type: application/json

{"title":"title added with put",
"description":"list description",
"guid": "guidcreatedwithput201708171440",
"createdDate": "2017-08-17-14-40-34",
"amendedDate": "2017-08-17-14-40-34"}

HTTP PUT Response Example

HTTP/1.1 201 Created
Date: Thu, 17 Aug 2017 13:41:46 GMT
Content-Type: application/json
Server: Jetty(9.4.4.v20170414)
Content-Length: 0

HTTP DELETE Verb

Demo


HTTP DELETE Send Example

curl -X DELETE https://apichallenges.herokuapp.com/lists/{guid} ^
-H "Authorization: Basic YWRtaW46cGFzc3dvcmQ=" ^
--proxy 127.0.0.1:8888

HTTP DELETE Request Example

DELETE https://apichallenges.herokuapp.com/lists/{guid} HTTP/1.1
User-Agent: curl/7.39.0
Host: localhost:4567
Accept: */*
Connection: Keep-Alive
Authorization: Basic YWRtaW46cGFzc3dvcmQ=

HTTP DELETE Response Example

HTTP/1.1 204 No Content
Date: Thu, 17 Aug 2017 12:20:35 GMT
Content-Type: application/json
Server: Jetty(9.4.4.v20170414)

Common HTTP Status codes in response to a DELETE

  • 200 - OK, did whatever I was supposed to
  • 202 - OK, I'll do that later
  • 204 - OK, I have no more information to give you
  • 404 - I can't post to that url it is not found
  • 401 - you need to give me authorisation details see WWW-Authenticate header
  • 403 - url probably exists but you are not allowed to access it
  • 500 - your request made me crash

HTTP OPTIONS Verb

  • OPTIONS - shows the verbs available on this url
  • returns an Allow header describing the allowed HTTP Verbs

HTTP OPTIONS Send Example

curl -X OPTIONS https://apichallenges.herokuapp.com/lists ^
--proxy 127.0.0.1:8888

Demo


HTTP OPTIONS Request Example

OPTIONS https://apichallenges.herokuapp.com/lists HTTP/1.1
User-Agent: curl/7.39.0
Host: localhost:4567
Accept: */*
Connection: Keep-Alive

HTTP OPTIONS Response Example

HTTP/1.1 200 OK
Date: Thu, 17 Aug 2017 12:24:39 GMT
Allow: GET, POST, PUT
Content-Type: text/html;charset=utf-8
Server: Jetty(9.4.4.v20170414)
Content-Length: 0

Common HTTP Status codes in response to a OPTIONS

  • 200 - OK, did whatever I was supposed to
  • 404 - I can't post to that url it is not found