PowerShellでのREST APIの基本操作ガイド

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リクエストで特定のユーザー情報を取得

  1. REST APIを使って、IDが3のユーザー情報を取得するスクリプトを作成してください。
  2. 取得したユーザー情報の名前をコンソールに表示してください。

問題 2: POSTリクエストで新しい投稿を作成

  1. 新しい投稿(タイトル: “PowerShell REST API”, 内容: “学習中”, ユーザーID: 1)を作成するスクリプトを作成してください。
  2. レスポンスとして返された新しい投稿の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の活用範囲を広げていきましょう。