はじめに
最近、Goに触れる機会が多くなり文法などの勉強を進めています。そこで、今回はREST Client
を使ってサーバーにHTTPリクエストを送る簡易的なプログラムを作成、実行していきます。とても初歩的な内容ですが少しでも参考になれば幸いです。
では、始めていきます。
REST Clientとは?
そもそもREST Client
について簡単に説明すると、VSCode上で直接HTTPリクエストを送信し、レスポンスを表示できる拡張機能です。
Postman
のような外部ツールを使用する必要がなくなり、APIテストを便利で効率的なものにすることができます。
他の主要な特徴、使い方などはページ末のリンク先(1つ目)にあるREADME
を参照してください。
コード
今回はサーバー用のserver.go
とリクエスト送信用のrequest.http
を作成します。
なお、ユースケースはリクエストから送信された「ユーザー名」と「パスワード」を受け取り、これがサーバーにあらかじめ設定された認証情報と一致するかを検証します。
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
)
//データ構造を定義
type LoginRequest struct {
Username string `json:"username"`
Password string `json:"password"`
}
//リクエストがPOSTメソッドかどうか確認し、不正なメソッドの場合はエラーを返す
func loginHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodPost {
var loginReq LoginRequest
decoder := json.NewDecoder(r.Body)
if err := decoder.Decode(&loginReq); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
// ユーザー名とパスワードの確認
if loginReq.Username == "user" && loginReq.Password == "password123" {
w.WriteHeader(http.StatusOK)
w.Write([]byte("Login successful"))
} else {
w.WriteHeader(http.StatusUnauthorized)
w.Write([]byte("Invalid credentials"))
}
} else {
http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
}
}
func main() {
http.HandleFunc("/login", loginHandler)
fmt.Println("Server is running on port 8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
POST http://localhost:8080/login
Content-Type: application/json
{
"username": "user",
"password": "password123"
}
2つのコードを記述することができたら、ターミナルでgo mod init server.go
、go run server.go
を実行します。
次に、request.httpの画面を開いてください。REST Client
がインストールされている場合、POST http://localhost:8080/login
の上部にSend Request
が表示されているはずなのでそこをクリックします。
すると、以下のようにレスポンスがくるはずです。
HTTP/1.1 200 OK
Date: Sun, 08 Dec 2024 02:59:24 GMT
Content-Length: 16
Content-Type: text/plain; charset=utf-8
Connection: close
Login successful
もちろん、request.http
を書き換える(user
→use
に変更など)するとしたようにUnauthorized
が返ります。
HTTP/1.1 401 Unauthorized
Date: Sun, 08 Dec 2024 02:59:55 GMT
Content-Length: 19
Content-Type: text/plain; charset=utf-8
Connection: close
Invalid credentials
Date
部分はレスポンスの時間を表します。
GMT
はイギリスのグリニッジ天文台を基準とした時間(グリニッジ標準時)なので日本と比較すると-9時間差が生まれます。
今回は2024/12/08(Sun) 11:59ごろに実行したので上のように表示されます。
ちなみにですが、UTC
は精度の高い原子時計と天体観測に基づいて決められた時間(協定世界時)です。
おわりに
今回の記事ではREST Client
を利用してリクエストを送信してみました。
また、今回は認証情報があらかじめ決められているという形でしたが、次はデータベースを導入してみようと思います。また読んでいただけると嬉しいです。
では、今回の記事はこれで終わりです。最後までお読みいただきありがとうございました。
参考