1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RCC (立命館コンピュータークラブ)Advent Calendar 2024

Day 20

【Go】REST Clientを使ってリクエストを送信してみる

Last updated at Posted at 2024-12-19

はじめに

最近、Goに触れる機会が多くなり文法などの勉強を進めています。そこで、今回はREST Clientを使ってサーバーにHTTPリクエストを送る簡易的なプログラムを作成、実行していきます。とても初歩的な内容ですが少しでも参考になれば幸いです。

では、始めていきます。

REST Clientとは?

そもそもREST Clientについて簡単に説明すると、VSCode上で直接HTTPリクエストを送信し、レスポンスを表示できる拡張機能です。
Postmanのような外部ツールを使用する必要がなくなり、APIテストを便利で効率的なものにすることができます。

他の主要な特徴、使い方などはページ末のリンク先(1つ目)にあるREADMEを参照してください。

コード

今回はサーバー用のserver.goとリクエスト送信用のrequest.httpを作成します。
なお、ユースケースはリクエストから送信された「ユーザー名」と「パスワード」を受け取り、これがサーバーにあらかじめ設定された認証情報と一致するかを検証します。

server.go
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))
}

request.http
POST http://localhost:8080/login
Content-Type: application/json

{
  "username": "user",
  "password": "password123"
}

2つのコードを記述することができたら、ターミナルでgo mod init server.gogo run server.goを実行します。
次に、request.httpの画面を開いてください。REST Clientがインストールされている場合、POST http://localhost:8080/loginの上部にSend Requestが表示されているはずなのでそこをクリックします。

すると、以下のようにレスポンスがくるはずです。

Response
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を書き換える(useruseに変更など)するとしたようにUnauthorizedが返ります。

Response
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を利用してリクエストを送信してみました。
また、今回は認証情報があらかじめ決められているという形でしたが、次はデータベースを導入してみようと思います。また読んでいただけると嬉しいです。

では、今回の記事はこれで終わりです。最後までお読みいただきありがとうございました。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?