1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

はじめに

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を極めていきたい!

1
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?