Go を使用したシンプルな REST API の構築

Susan Sarandon
リリース: 2024-10-31 22:06:44
オリジナル
555 人が閲覧しました

Building a simple REST API with Go

Go はシステム プログラミングに最適な言語ですが、Web、特に REST API を構築する場合にも威力を発揮します。このガイドでは、Go の標準ライブラリを使用して単純な REST API を作成する手順を説明します。サーバーのリストを管理する API を構築し、サーバー レコードを追加、削除、表示できるようにします。また、メソッドのマッチングに Go 1.22 の新しいルーターの機能強化を使用する予定です。これにより、よりクリーンなルートとハンドラーを使用できるようになります。

このガイドは、Go の基本を理解しており、Go がマシンにインストールされていることを前提としています。

セットアップ

プロジェクト用に新しいディレクトリを作成し、Go モジュールを初期化します。

mkdir server-api
cd server-api
go mod init server-api
ログイン後にコピー

コード

main.go というファイルを作成します。 Go の標準 http パッケージを使用します。これには、基本的な API に必要なものがすべて含まれています。

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
)
ログイン後にコピー

まず、サーバーがどのようなものかを定義しましょう。 ID、名前、IP アドレス、地域のみを含めてシンプルにしておきます:

type Server struct {
    ID     string `json:"id"`
    Name   string `json:"name"`
    IP     string `json:"ip"`
    Region string `json:"region`
}
ログイン後にコピー

スライスを使用してサーバーをメモリに保存します。実際のアプリケーションでは、おそらくデータベースを使用します:

var servers = []Server{
    {ID: "srv1", Name: "prod-1", IP: "10.0.1.1", Region: "us-east"},
    {ID: "srv2", Name: "prod-2", IP: "10.0.1.2", Region: "eu-west"},
}
ログイン後にコピー

ルーターの作成

次に、ルートを設定します。 Go 1.22 では、これを非常に簡単にする新しいルーティング構文が導入されました。

func main() {
    mux := http.NewServeMux()

    mux.HandleFunc("GET /servers", listServers)
    mux.HandleFunc("GET /servers/{id}", showServer)
    mux.HandleFunc("POST /servers", createServer)
    mux.HandleFunc("DELETE /servers/{id}", deleteServer)

    fmt.Println("Server starting on port 8080...")
    log.Fatal(http.ListenAndServe(":8080", mux))
}
ログイン後にコピー

ハンドラー

次に、各ハンドラーを実装しましょう。まず、すべてのサーバーをリストします:

func listServers(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(servers)
}
ログイン後にコピー

ID による単一サーバーの取得:

func showServer(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    id := r.PathValue("id")

    for _, server := range servers {
        if server.ID == id {
            json.NewEncoder(w).Encode(server)
            return
        }
    }

    http.Error(w, "Server not found", http.StatusNotFound)
}
ログイン後にコピー

新しいサーバーの作成:

func createServer(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")

    var server Server
    if err := json.NewDecoder(r.Body).Decode(&server); err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    servers = append(servers, server)
    w.WriteHeader(http.StatusCreated)
    json.NewEncoder(w).Encode(server)
}
ログイン後にコピー

そして最後に、サーバーを削除します:

func deleteServer(w http.ResponseWriter, r *http.Request) {
    id := r.PathValue("id")

    for i, server := range servers {
        if server.ID == id {
            servers = append(servers[:i], servers[i+1:]...)
            w.WriteHeader(http.StatusNoContent)
            return
        }
    }

    http.Error(w, "Server not found", http.StatusNotFound)
}
ログイン後にコピー

APIの使用

コードを配置したら、それを実行します。

go run main.go
ログイン後にコピー

cURL を使用して各エンドポイントと対話する方法は次のとおりです。

すべてのサーバーをリストします:

curl localhost:8080/servers
ログイン後にコピー

特定のサーバーを取得します:

curl localhost:8080/servers/srv1
ログイン後にコピー

サーバーを追加します:

curl -X POST localhost:8080/servers   -H "Content-Type: application/json";   -d '{"id":"srv3","name":"prod-3","ip":"10.0.1.3","region":"ap-south"}';
ログイン後にコピー

サーバーを削除します:

curl -X DELETE localhost:8080/servers/srv1
ログイン後にコピー

次は何ですか?

これは基本的な API ですが、追加できる機能はたくさんあります。

  • 入力検証
  • 適切なエラー処理
  • PostgreSQL などのデータベースを備えた永続サーバー
  • 認証
  • ログのリクエスト
  • 単体テスト

標準ライブラリは驚くほど API を構築する能力があります。より多くのフル機能を備えたフレームワークが利用可能ですが、標準ライブラリから始めると、舞台裏で特別な処理を行わずに基本を理解するのに役立ちます。

以上がGo を使用したシンプルな REST API の構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!