🙌

Go言語で学ぶREST API入門 [初学者向け]

2025/02/28に公開

はじめに

REST APIは、Webアプリケーションやモバイルアプリケーションが、サーバーとデータをやり取りするための仕組みです。
Go言語は、そのシンプルさと高速性から、REST APIを効率的に構築するのに非常に適している言語です。

本記事では、REST APIの基本概念からGoを使った実装方法まで、初心者向けにわかりやすく解説します。

対象読者

  • そもそもREST APIが何かよく分からない方
  • Go言語でWeb APIを作成してみたい方
  • シンプルなAPIサーバーを構築したい方

目次

  1. そもそもREST APIとは?
    • RESTの基本概念
    • HTTPメソッドの種類
    • RESTfulなAPIの特徴
  2. Go言語でのREST API実装
    • 必要なパッケージのインストール
    • ハンドラ関数の作成
    • ルーティングの設定
  3. 実践:GoでシンプルなREST APIを作成
    • メモリ内にデータを保存する簡易API
    • CRUD操作(Create, Read, Update, Delete)の実装
  4. Postmanを使った動作確認

1. そもそもREST APIとは?

1.1 REST の基本概念

  • REST (REpresentational State Transfer) は、Web 上でデータをやり取りするための設計スタイルのこと。
  • クライアント - サーバーモデル に基づき、クライアントがリクエストを送り、サーバーがレスポンスを返す。
  • ステートレス (Stateless) な設計で、各リクエストはそれぞれ独立している。

1.2 HTTP メソッドの種類
REST APIでは、以下のHTTPメソッドを使って、データの操作を行います。

メソッド 説明 使用例
GET データの取得 GET /users
POST データの新規作成 POST /users
PUT データの更新(完全置き換え) PUT /users/{id}
PATCH データの部分更新 PATCH /users/{id}
DELETE データの削除 DELETE /users/{id}

1.3 RESTfulなAPIの特徴

  • リソース指向のURL設計:データの種類をURLで表現する。
    • 例: /users(ユーザー一覧)、/users/{id}(特定のユーザー)
  • HTTPメソッドの適切な使用:CRUD操作をHTTPメソッドに対応させる。
  • ステートレスな通信:リクエストごとに認証情報を送信する。

2. Go言語でのREST API実装

Go言語では、net/httpパッケージ を使ってREST API を構築できますが、Ginフレームワークを使うと、よりシンプルで高速な実装が可能です。

2.1 必要なパッケージのインストール
以下のコマンドで、Ginフレームワークをインストールします。

go get -u github.com/gin-gonic/gin

2.2 ハンドラ関数の作成

  • ハンドラ関数とは、各エンドポイントに対するリクエストを処理する関数です。
  • 例:GET /users リクエストに対して、ユーザー一覧を返すハンドラを作成。
package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

type User struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
}

var users = []User{
    {ID: 1, Name: "John"},
    {ID: 2, Name: "Jane"},
}

func getUsers(c *gin.Context) {
    c.JSON(http.StatusOK, users)
}

2.3 ルーティングの設定

  • ルーティングとは、URLとハンドラ関数を紐付けることです。
  • Ginでは、GET, POST, PUT, DELETEメソッドに対応したルーティングが簡単に設定できます。
func main() {
    router := gin.Default()
    router.GET("/users", getUsers)  // ユーザー一覧の取得
    router.Run(":8080")  // ポート 8080 で起動
}

3. 実践:Go でシンプルな REST API を作成

3.1 メモリ内にデータを保存する簡易 API

  • サーバー起動中はメモリ内にデータを保存し、CRUD操作を実現します。
  • CRUD操作とは、Create(作成)、Read(取得)、Update(更新)、Delete(削除)のことです。

3.2 CRUD 操作の実装
以下のエンドポイントを実装します。

  • GET /users:ユーザー一覧の取得
  • POST /users:新しいユーザーの作成
  • GET /users/:id:特定のユーザーの取得
  • PUT /users/:id:ユーザー情報の更新
  • DELETE /users/:id:ユーザーの削除

main.go

// POST /users のハンドラ
func createUser(c *gin.Context) {
    var newUser User
    if err := c.ShouldBindJSON(&newUser); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }
    newUser.ID = len(users) + 1
    users = append(users, newUser)
    c.JSON(http.StatusCreated, newUser)
}

// ルーティングの設定
func main() {
    router := gin.Default()
    router.GET("/users", getUsers)
    router.POST("/users", createUser)  // 新しいユーザーの作成
    router.Run(":8080")
}

4. Postman を使った動作確認

  • Postmanを使うことで、APIの動作確認が簡単に行えます。
  • GET, POST, PUT, DELETE の各メソッドを使用して、エンドポイントをテスト。
  1. GET /users を実行して、ユーザー一覧を取得する。
  2. POST /users を実行して、新しいユーザーを作成する。

まとめ

項目 説明
REST API Webアプリケーションがサーバーと通信するための仕組み
HTTPメソッド GET, POST, PUT, DELETEを使ったCRUD操作
Ginフレームワーク シンプルかつ高速なREST APIをGoで構築できる

REST APIの基本からGoを使った実装までを簡単に解説しました。
アプリケーション開発やそもそものプログラムに慣れるための練習としてREST APIを作ってみることはいい勉強になります。
切実にGoを極めていきたい!

Discussion