HTTPリクエストには、さまざまなメソッドがあり、データの取得、送信、更新、削除など、異なる操作を行うことができます。この記事では、HTTPプロトコルでよく使われるGET、POST、PUT、DELETEの4つのメソッドについて、使用方法と違いを説明します。
目次
基本概念の説明
- GET: データの取得に使用される。冪等性があり、複数回実行しても同じ結果が得られる。
- POST: 新しいデータを送信してサーバー側で処理を行う。非冪等。
- PUT: 既存のリソースを更新。冪等性がある。
- DELETE: リソースを削除。冪等性がある。
GET、POST、PUT、DELETEの違い
メソッド | 用途 | 特徴 | リクエストボディ |
---|---|---|---|
GET | データの取得 | 安全で冪等性がある | なし |
POST | 新しいデータの送信・作成 | 非冪等 | あり |
PUT | 既存データの更新 | 冪等性がある | あり |
DELETE | リソースの削除 | 冪等性がある | なし |
各言語でのサンプルコード
Python: GET、POST、PUT、DELETEのリクエスト
import requests
# GETリクエスト
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.json())
# POSTリクエスト
data = {'title': 'foo', 'body': 'bar', 'userId': 1}
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=data)
print(response.json())
# PUTリクエスト
data = {'id': 1, 'title': 'foo', 'body': 'bar', 'userId': 1}
response = requests.put('https://jsonplaceholder.typicode.com/posts/1', json=data)
print(response.json())
# DELETEリクエスト
response = requests.delete('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)
C#: GET、POST、PUT、DELETEのリクエスト
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
HttpClient client = new HttpClient();
// GETリクエスト
var response = await client.GetAsync("https://jsonplaceholder.typicode.com/posts/1");
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
// POSTリクエスト
var postData = new StringContent("{\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}", Encoding.UTF8, "application/json");
response = await client.PostAsync("https://jsonplaceholder.typicode.com/posts", postData);
Console.WriteLine(await response.Content.ReadAsStringAsync());
// PUTリクエスト
var putData = new StringContent("{\"id\": 1, \"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}", Encoding.UTF8, "application/json");
response = await client.PutAsync("https://jsonplaceholder.typicode.com/posts/1", putData);
Console.WriteLine(await response.Content.ReadAsStringAsync());
// DELETEリクエスト
response = await client.DeleteAsync("https://jsonplaceholder.typicode.com/posts/1");
Console.WriteLine(response.StatusCode);
}
}
C++: GET、POST、PUT、DELETEのリクエスト (CURLを使用)
#include <iostream>
#include <curl/curl.h>
int main() {
CURL* curl;
CURLcode res;
// GETリクエスト
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts/1");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
// POSTリクエスト
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"title\":\"foo\", \"body\":\"bar\", \"userId\":1}");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
// PUTリクエスト
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts/1");
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"id\":1, \"title\":\"foo\", \"body\":\"bar\", \"userId\":1}");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
// DELETEリクエスト
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts/1");
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return 0;
}
Java: GET、POST、PUT、DELETEのリクエスト
import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;
public class HttpMethodsExample {
public static void main(String[] args) throws IOException {
// GETリクエスト
HttpURLConnection connection = (HttpURLConnection) new URL("https://jsonplaceholder.typicode.com/posts/1").openConnection();
connection.setRequestMethod("GET");
try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
System.out.println(content.toString());
}
// POSTリクエスト
connection = (HttpURLConnection) new URL("https://jsonplaceholder.typicode.com/posts").openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
try (OutputStream os = connection.getOutputStream()) {
byte[] input = "{\"title\":\"foo\", \"body\":\"bar\", \"userId\":1}".getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
System.out.println(content.toString());
}
// PUTリクエスト
connection = (HttpURLConnection) new URL("https://jsonplaceholder.typicode.com/posts/1").openConnection();
connection.setRequestMethod("PUT");
connection.setDoOutput(true);
try (OutputStream os = connection.getOutputStream()) {
byte[] input = "{\"id\":1, \"title\":\"foo\", \"body\":\"bar\", \"userId\":1}".getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
System.out.println(content.toString());
}
// DELETEリクエスト
connection = (HttpURLConnection) new URL("https://jsonplaceholder.typicode.com/posts/1").openConnection();
connection.setRequestMethod("DELETE");
System.out.println(connection.getResponseCode());
}
}
JavaScript: GET、POST、PUT、DELETEのリクエスト
const axios = require('axios');
// GETリクエスト
axios.get('https://jsonplaceholder.typicode.com/posts/1')
.then(response => console.log(response.data))
.catch(error => console.error(error));
// POSTリクエスト
axios.post('https://jsonplaceholder.typicode.com/posts', {
title: 'foo',
body: 'bar',
userId: 1
})
.then(response => console.log(response.data))
.catch(error => console.error(error));
// PUTリクエスト
axios.put('https://jsonplaceholder.typicode.com/posts/1', {
id: 1,
title: 'foo',
body: 'bar',
userId: 1
})
.then(response => console.log(response.data))
.catch(error => console.error(error));
// DELETEリクエスト
axios.delete('https://jsonplaceholder.typicode.com/posts/1')
.then(response => console.log(response.status))
.catch(error => console.error(error));
まとめ
GET、POST、PUT、DELETEメソッドの違いや使用方法について学びました。WebアプリケーションでAPI通信を行う際には、これらのメソッドを正しく使い分けることが重要です。
コメント