Python and REST APIs

REST APIs on the internet communicate using HTTP. This means that whenever we want to send a REST API some data or receive some data from it, we must do this using HTTP.

In HTTP clients communicate with servers by sending requests; servers respond with responses. When we talk about interacting with a REST API, we are the client. The server is the API we are talking with.

For example, you as a client may communicate with the Twitter API, or with the Facebook API, and so on.

If you are thinking about creating your own API so that clients can communicate with you (for example, your own mobile app), you may be interested in my comprehensive online course.

Sending a request to an API

Let’s imagine we have the sample API we want to communicate with, http://api.example.com/. We could interact with it by sending a HTTP request.

When making a request to a URL like http://api.example.com/, everything after the TLD (.com) is called the endpoint. In this case, the endpoint is /.

The API documentation will give you information regarding exactly what endpoint to make requests to for specific data.

Making a GET request in Python

You’ll have to install the popular requests library to easily make HTTP requests in Python:

pip install requests

Then, you’ll be able to execute a file like the below to make a GET request:

import requestsresp = requests.get('http://api.example.com/')
print(resp.json())

Making a POST request in Python

POST requests are normally used to send data to the server. For example, you may send some JSON data:

import requestspayload = {'name': 'Example'}resp = requests.post('http://api.example.com/', json=payload)
print(resp.json())

You can also include custom headers if required:

import requestspayload = {'name': 'Example'}
headers = {'Content-Type': 'application/json'}
resp = requests.post('http://api.example.com/', json=payload, headers=headers)
print(resp.json())

You can send form data instead of JSON just by doing requests.post('http://api.example.com/', data={'field': 'value'} instead.

Usual headers

Most REST APIs will require that you authenticate using an API key. This will normally be included in the URL, the body of the request, or a header. Below are some examples of how to include authorization for an API:

In the URL:

import requestsAPI_KEY = '123abc'resp = requests.post('http://api.example.com/?key=' + API_KEY)
print(resp.json())

In the payload:

import requestspayload = {'key': '123abc'}resp = requests.post('http://api.example.com/', json=payload)
print(resp.json())

In a header:

import requestsheaders = {'Authorization': 'Bearer 123abc'}  # Having 'Bearer' is common. Check your API documentation to see if it is required!resp = requests.post('http://api.example.com/', headers=headers)
print(resp.json())

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Adesoji Susan

Adesoji Susan

Software Engineer/developer advocate /technical writer.