Pythonのrequestsは、HTTPリクエストを送信するための非常に人気のあるライブラリです。本文では、Pythonのrequestsを利用して、GET、POST、PUT、DELETEリクエストを送信して、レスポンスを受信する方法を紹介します。Python環境でAPIエンドポイントをテストしてみたい場合は、ぜひ本文の内容を見逃しないでください。
Apidogは個人向け完全無料なツールとして、誰でも無料で制限なく利用できます。下記のボタンからApidogを無料で取得しましょう👇👇👇
Python requestsとは?
Pythonのrequestsは、HTTPリクエストを送信するための非常に人気のあるライブラリです。requestsを使用することで、PythonプログラムがウェブページやAPIエンドポイントなどのリモートサーバーに対してGET、POST、PUT、DELETEなどのHTTPメソッドを使用してリクエストを送信し、レスポンスを受信することができます。
requestsライブラリは、Pythonの標準ライブラリであるurllibよりも使いやすく、シンプルなAPIを提供しています。このため、多くの開発者がHTTP通信を行う際にrequestsを選択します。
こちらもお読みください:urllibとrequestsモジュールとの比較
HTTPメソッド - GET/POST/PUT/DELETE
APIに対して、異なる操作を行うには、異なるHTTPメソッドを使用するのがREST原則の規定になります。REST(Representational State Transfer)の原則の1つとして、HTTPメソッドを使い分けることが推奨されています。REST APIでは、リソースに対する操作をHTTPメソッドで表現することが基本的な考え方です。主なHTTPメソッドとRESTでの使用例は以下の通りです。
- GET - リソースの取得
- POST - 新規リソースの作成
- PUT - リソースの上書き更新
- DELETE - リソースの削除
このようにCRUD操作に対応したHTTPメソッドを使い分けることで、クライアントは実行したい処理の内容をHTTPメソッドだけで表現できます。サーバ側もメソッドに対応した処理を実装すればいいので、両者のインタフェースが明確になります。
Python requestsでGET/POST/PUT/DELETEリクエストを送信
それでは、Python requestsを使ってREST APIへリクエストを送信する場合、HTTPメソッドを使い分けて、GET/POST/PUT/DELETEリクエストをよく送信する必要もよくあるのでしょう。Pythonのrequestsライブラリを使ってHTTPメソッドを指定する場合は、requests.request()メソッドの第一引数に指定します。基本的な書き方は以下:
import requests
response = requests.request(method, url, params=None, data=None)
- methodにはGET、POST、PUT、DELETEなどのHTTPメソッドを文字列で指定します。
- urlはリクエストを送信するURLを指定します。
- paramsにクエリパラメータを辞書で指定できます。
- dataにリクエストボディを指定できます。
Python requestsでGETリクエストを送信
例えば、Python requestsでGETリクエストを送信する場合は、次のコードで実装することができます。
import requests
url = "http://example.com/api/items"
params = {"category": "food", "order": "desc"}
response = requests.get(url, params=params)
print(response.status_code)
print(response.text)
- requests.get()メソッドでGETリクエストを送信
- 第一引数にリクエストURL、第二引数にクエリパラメータを辞書で指定
- レスポンスがResponseオブジェクトとして返ってくる
- status_codeやtext属性でレスポンスの詳細を取得
この例では、categoryとorderのクエリパラメータ付きでAPIリクエストを送信しています。GETリクエストはデータの取得が主な目的のため、パラメータ指定に注意が必要です。
Python requestsでPOSTリクエストを送信
Pythonのrequestsライブラリを使ってPOSTリクエストを送信する基本的な例は以下の通りです。
import requests
url = "http://example.com/api/"
data = {"key1": "value1", "key2": "value2"}
response = requests.post(url, data=data)
print(response.status_code)
print(response.text)
- requests.post()メソッドを使うことで、POSTリクエストが送信できる
- 第一引数にリクエスト送信先のURL
- data引数にPOSTデータを辞書型で指定する
このコードでは、example.comのAPIに対して、key1、key2のデータをPOSTしています。レスポンスのステータスコードやテキスト本文をprint()で取得できます。
Python requestsでPUTリクエストを送信
Pythonのrequestsライブラリを使ってDELETEリクエストを送信する基本的な例は以下のようになります。
import requests
url = "http://example.com/api/items/1"
response = requests.delete(url)
print(response.status_code)
print(response.text)
- requests.delete()メソッドを呼び出し
- 第一引数に対象のリソースのURLを指定
この例では、example.comのAPIエンドポイントに対して、ID=1のリソース削除の要求をDELETEメソッドで送信しています。レスポンスはResponseオブジェクトとして返ってきます。ステータスコードやテキスト本文を参照できます。
このようにrequests.delete()を使うことで、簡単にDELETEリクエストを実行できます。
Python requestsでDELETEリクエストを送信
Pythonのrequestsライブラリを用いたDELETEリクエストの送信方法は以下の通りです。
import requests
url = "http://example.com/api/items/1"
headers = {"Content-Type": "application/json"}
response = requests.delete(url, headers=headers)
print(response.status_code)
if response.status_code == 204:
print("Successfully deleted the resource.")
- requests.delete()メソッドを使ってDELETEリクエストを送信
- 削除対象のリソースのURLを第一引数に指定
- ヘッダなどの追加オプションはkwargs引数で指定
- レスポンスのstatus_codeで削除の成功・失敗を判定
この例ではID=1のリソースの削除要求を送信しています。204 No Contentが削除成功を示す一般的なステータスコードです。
Apidog:より直感にAPIリクエストをテスト&管理
Python requestsは非常に強力で機能が豊富なAPIリクエストライブラリですが、習得するまでに一定のコストがかかります。そこで、ここではApidogという直感的で使いやすいGUIのAPIクライアントツールを皆さんに紹介します。Apidogを使用すると、どの種類のHTTPリクエストをも直感的なUIで送信できるので、非常に便利です。
Apidogは、十数種のHTTPメソッドにも対応可能なので、GET、POST、PUT、DELETEなどのリクエストを送信する場合でも、上記画像のように直感的なUIで簡単に指定してリクエストを送信することができます。
Python requestsの実装コードをも自動生成
また、Apidogを使ってAPIリクエストを送信してレスポンスを取得すると、そのリクエスト情報をユースケースとして保存することも可能です。また、Pythonのrequestsの実装コードを手動で書きたくない場合でも、Apidogを使って、1クリックでそれを生成することができるので、実装コードを手動で記述しなくても、簡単に取得できます。
ステップ⒈Apidogで先に保存したAPIかRequestを選択して、右側パネルで「コード生成」にガーソルを置き、「クライアントコードを生成」を選択します。
ステップ⒉コード生成ウィンドウで、「Python」を選択し、「Requests」を選択すると、Requestsモジュールの実装コードを生成することができます。
まとめ
Pythonのrequestsライブラリを使うことで、GETやPOST、PUT、DELETEなどのHTTPメソッドを指定して、様々なAPIリクエストを簡単に実装できることができます。このように、REST APIを扱う際にはHTTPメソッドを適切に使い分けることが大切ですが、requestsライブラリを使えばPythonから簡単に実現できそうです。
また、Apidogにはリクエストの保存機能があり、これを利用することでAPIドキュメントの生成も可能です。保存したリクエスト情報から、Pythonのrequestsライブラリによる実装コードも1クリックで生成できるので、APIをテストしたり、管理したりする時に非常に役立ちます。