PowerShellは、Windows環境で幅広く利用される強力なスクリプト言語であり、特にIT管理者や開発者にとって非常に便利なツールです。
PowerShellを使用することで、REST APIとの連携を簡単に行うことができます。
REST APIは、ウェブサービスやデータベースと通信するための標準的なインターフェースで、多くのWebアプリケーションやサービスがこれを利用しています。
この記事では、PowerShellを使用してREST APIを操作する基本的な方法について説明します。
具体的には、APIに対するGET、POST、PUT、DELETEリクエストをどのように実行するか、そしてAPIレスポンスを処理する方法について学びます。
最後に、学んだ内容を確認するための演習問題も用意しました。
REST APIとは?
REST API(Representational State Transfer Application Programming Interface)は、Webサービスがデータをやり取りするための一般的なプロトコルです。
主に以下のHTTPメソッドを使用してリクエストを行います。
- GET: データを取得するリクエスト
- POST: 新しいデータを作成するリクエスト
- PUT: 既存のデータを更新するリクエスト
- DELETE: データを削除するリクエスト
これらの操作をPowerShellを通じて実行することで、WebサービスやAPIとの連携が可能です。
PowerShellでREST APIを操作するための基本コマンド
PowerShellには、HTTPリクエストを実行するためのコマンド Invoke-RestMethod があります。
このコマンドを使用して、APIにリクエストを送り、レスポンスを処理することができます。
Invoke-RestMethodの基本構文
以下がInvoke-RestMethodの基本的な構文です。
Invoke-RestMethod -Uri <URL> -Method <HTTPメソッド> -Headers <ヘッダー> -Body <リクエストボディ>
- -Uri: APIのエンドポイントURL
- -Method: HTTPメソッド(GET, POST, PUT, DELETEなど)
- -Headers: ヘッダー情報(必要に応じて)
- -Body: リクエストボディ(POSTやPUTで使用)
Invoke-RestMethod と Invoke-WebRequest の違い
Invoke-RestMethod
- APIから返されるJSONやXMLなどのデータを自動的に解析し、PowerShellオブジェクトとして出力します。
- 簡潔なデータ取得や操作に便利。
Invoke-WebRequest
- Webページ全体のHTMLやヘッダー、Cookieなどの詳細情報を取得するために適しているコマンドです。
- APIからのレスポンスをより詳細に制御したい場合に使用します。
GETリクエストを送信する
最も基本的な操作として、GETリクエストを使ってデータを取得する方法を紹介します。
たとえば、あるAPIからユーザー情報を取得したい場合、以下のようなスクリプトを書きます。
Invoke-RestMethodによるGETリクエスト
# APIのURL
$apiUrl = "https://jsonplaceholder.typicode.com/users"
# GETリクエストを送信
$response = Invoke-RestMethod -Uri $apiUrl -Method Get
# レスポンスを表示
$response
このスクリプトでは、APIエンドポイント https://jsonplaceholder.typicode.com/users に対してGETリクエストを送り、ユーザー情報を取得します。
Invoke-WebRequestによるGETリクエスト
# APIのURL
$apiUrl = "https://jsonplaceholder.typicode.com/users"
# GETリクエストを送信
$response = Invoke-WebRequest -Uri $apiUrl -Method Get
# レスポンスの内容を表示
Write-Host "HTML内容: $($response.Content)"
Invoke-WebRequestを使用すると、$response.ContentでHTMLやJSONの生データを取得できます。
POSTリクエストを送信する
次に、POSTリクエストを使用して新しいデータを作成する方法を見てみましょう。
POSTリクエストでは、リクエストボディに送信するデータを指定します。
Invoke-RestMethodによるPOSTリクエスト
# APIのURL
$apiUrl = "https://jsonplaceholder.typicode.com/posts"
# POSTリクエストのボディ
$body = @{
title = "foo"
body = "bar"
userId = 1
}
# POSTリクエストを送信
$response = Invoke-RestMethod -Uri $apiUrl -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
# レスポンスを表示
$response
ここでは、https://jsonplaceholder.typicode.com/posts に対して新しい投稿を作成するリクエストを送信しています。
ConvertTo-Json コマンドを使用して、PowerShellのハッシュテーブルをJSON形式に変換し、APIに送信しています。
Invoke-WebRequestによるPOSTリクエスト
# APIのURL
$apiUrl = "https://jsonplaceholder.typicode.com/posts"
# POSTリクエストのボディ(JSON形式)
$body = @{
title = "PowerShell REST API"
body = "学習中"
userId = 1
} | ConvertTo-Json
# POSTリクエストを送信
$response = Invoke-WebRequest -Uri $apiUrl -Method Post -Body $body -ContentType "application/json"
# レスポンスの内容を表示
Write-Host "レスポンス: $($response.Content)"
PUTリクエストを送信する
PUTリクエストは、既存のデータを更新するために使用されます。
以下は、PUTリクエストを使用して投稿を更新する例です。
PUTリクエストの例
# APIのURL(特定のリソースIDを指定)
$apiUrl = "https://jsonplaceholder.typicode.com/posts/1"
# PUTリクエストのボディ
$body = @{
id = 1
title = "updated title"
body = "updated body"
userId = 1
}
# PUTリクエストを送信
$response = Invoke-RestMethod -Uri $apiUrl -Method Put -Body ($body | ConvertTo-Json) -ContentType "application/json"
# レスポンスを表示
$response
このスクリプトでは、IDが1の投稿を更新しています。
POSTリクエストと同様に、ボディデータをJSON形式に変換してAPIに送信しています。
DELETEリクエストを送信する
最後に、DELETEリクエストを使用してデータを削除する方法を紹介します。
DELETEリクエストの例
# APIのURL(特定のリソースIDを指定)
$apiUrl = "https://jsonplaceholder.typicode.com/posts/1"
# DELETEリクエストを送信
$response = Invoke-RestMethod -Uri $apiUrl -Method Delete
# レスポンスを表示
$response
この例では、IDが1の投稿を削除しています。
DELETEリクエストは、リクエストボディを必要としません。
エラーハンドリング
REST APIの呼び出しは、常に成功するとは限りません。
エラーハンドリングを行うことで、失敗時に適切な対応が取れるようにしておきましょう。
エラーハンドリングの例
try {
# 正常なAPIリクエスト
$apiUrl = "https://jsonplaceholder.typicode.com/posts/1"
$response = Invoke-RestMethod -Uri $apiUrl -Method Get
$response
}
catch {
# エラーが発生した場合
Write-Host "APIリクエストに失敗しました: $($_.Exception.Message)"
}
このスクリプトでは、try-catch構文を使用して、APIリクエストが失敗した場合にエラーメッセージを表示します。
演習問題
PowerShellを使用してREST APIを操作するスキルを身につけるために、以下の演習問題に取り組んでみましょう。
問題 1: GETリクエストで特定のユーザー情報を取得
- REST APIを使って、IDが3のユーザー情報を取得するスクリプトを作成してください。
- 取得したユーザー情報の名前をコンソールに表示してください。
問題 2: POSTリクエストで新しい投稿を作成
- 新しい投稿(タイトル: “PowerShell REST API”, 内容: “学習中”, ユーザーID: 1)を作成するスクリプトを作成してください。
- レスポンスとして返された新しい投稿のIDをコンソールに表示してください。
演習問題の解答例
解答 1: GETリクエストで特定のユーザー情報を取得
# APIのURL
$apiUrl = "https://jsonplaceholder.typicode.com/users/3"
# GETリクエストを送信
$response = Invoke-RestMethod -Uri $apiUrl -Method Get
# ユーザー名を表示
Write-Host "ユーザーの名前: $($response.name)"
解答 2: POSTリクエストで新しい投稿を作成
# APIのURL
$apiUrl = "https://jsonplaceholder.typicode.com/posts"
# POSTリクエストのボディ
$body = @{
title = "PowerShell REST API"
body = "学習中"
userId = 1
}
# POSTリクエストを送信
$response = Invoke-RestMethod -Uri $api
Url -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
# 新しい投稿のIDを表示
Write-Host "新しい投稿のID: $($response.id)"
まとめ
この記事では、PowerShellを使用してREST APIを操作する方法について学びました。
Invoke-RestMethodコマンドを使って、GET、POST、PUT、DELETEの各リクエストを送信する方法を習得しました。
また、エラーハンドリングや演習問題を通じて、実践的なスキルも身につけました。
REST APIを活用することで、さまざまなサービスやシステムと連携が可能になりますので、今後もAPIの利用を通じてPowerShellの活用範囲を広げていきましょう。