はじめに
REST APIは、Webアプリケーションやモバイルアプリケーションが、サーバーとデータをやり取りするための仕組みです。
Go言語は、そのシンプルさと高速性から、REST APIを効率的に構築するのに非常に適している言語です。
本記事では、REST APIの基本概念からGoを使った実装方法まで、初心者向けにわかりやすく解説します。
対象読者
- そもそもREST APIが何かよく分からない方
- Go言語でWeb APIを作成してみたい方
- シンプルなAPIサーバーを構築したい方
目次
- そもそもREST APIとは?
- RESTの基本概念
- HTTPメソッドの種類
- RESTfulなAPIの特徴
- Go言語でのREST API実装
- 必要なパッケージのインストール
- ハンドラ関数の作成
- ルーティングの設定
- 実践:GoでシンプルなREST APIを作成
- メモリ内にデータを保存する簡易API
- CRUD操作(Create, Read, Update, Delete)の実装
- 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
の各メソッドを使用して、エンドポイントをテスト。
- GET /users を実行して、ユーザー一覧を取得する。
- POST /users を実行して、新しいユーザーを作成する。
まとめ
項目 | 説明 |
---|---|
REST API | Webアプリケーションがサーバーと通信するための仕組み |
HTTPメソッド | GET, POST, PUT, DELETEを使ったCRUD操作 |
Ginフレームワーク | シンプルかつ高速なREST APIをGoで構築できる |
REST APIの基本からGoを使った実装までを簡単に解説しました。
アプリケーション開発やそもそものプログラムに慣れるための練習としてREST APIを作ってみることはいい勉強になります。
切実にGoを極めていきたい!