Skip to content

HTTPS 通信する REST API を実装

証明書を用意して https 通信を行える REST API を実装します。

実装手順

  • 証明書を用意します:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
  • 下記の要領でコードを作成します:
package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
)

func main() {
    // エンドポイントのルーティング
    http.HandleFunc("/user", getUserInfo)

    // サーバーの起動
    fmt.Println("Server started at https://localhost:443")
    // main.goまたはビルドしたモジュールから見た相対パスにある鍵ファイルを指定
    log.Fatal(http.ListenAndServeTLS(":443", "ssl/cert.pem", "ssl/key.pem", nil))
}

// ユーザ情報を取得します。
func getUserInfo(w http.ResponseWriter, r *http.Request) {

    // 戻りのデータ作成
    var userInfos []userInfo
    userInfos = append(
        userInfos,
        userInfo{
            Id:   1,
            Name: "nob",
            Age:  13,
        },
        userInfo{
            Id:   2,
            Name: "nob2",
            Age:  706,
        },
    )

    // レスポンス作成
    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(http.StatusOK)
    json.NewEncoder(w).Encode(userInfos)
}

// ユーザ情報
type userInfo struct {
    Id   int    // ID
    Name string // 名前
    Age  int    // 年齢
}
  • go run main.goまたはビルドしたモジュールでアプリ起動後、https に向けて curl を実行できます:
# 自己証明書を使う場合はSSLの検証に引っかかる可能性があるので -k オプションで回避しています。
# devcontainerで起動したアプリに対し、ホストOSのブラウザからであれば疎通が取れました。
curl -k https://localhost:443/user