Heim >Backend-Entwicklung >Golang >Erstellen von RESTful-APIs mit Go

Erstellen von RESTful-APIs mit Go

DDD
DDDOriginal
2024-10-11 10:24:29433Durchsuche

Building RESTful APIs with Go

Willkommen zu Teil 2 unserer Backend-Engineering für Full-Stack-Entwickler-Reihe! ? Heute befassen wir uns mit einem der grundlegendsten Themen: Erstellen von RESTful-APIs mit Go. Unabhängig davon, ob Sie ein internes Tool oder eine öffentliche API erstellen, ist es wichtig zu verstehen, wie RESTful-Endpunkte strukturiert und implementiert werden.

In diesem Beitrag behandeln wir Folgendes:

  • Was macht eine API RESTful aus (und warum es wichtig ist).
  • So entwerfen Sie Endpunkte und handhaben HTTP-Methoden.
  • Erstellen einer einfachen CRUD-API mit dem Net/http-Paket von Go und Gorilla Mux.
  • Verarbeitung von JSON-Anfragen und -Antworten.

Am Ende haben Sie ein solides Verständnis dafür, wie Sie skalierbare RESTful-APIs in Go entwerfen und implementieren. Fangen wir an! ?


Was macht eine API RESTful aus? ?

Bevor wir uns mit dem Code befassen, schauen wir uns kurz an, was eine API RESTful ausmacht. REST (Representational State Transfer) ist ein Architekturstil zum Erstellen von APIs, der diesen Prinzipien folgt:

  1. Staatenlos: Jede Anfrage des Kunden muss alle für die Bearbeitung notwendigen Informationen enthalten. Der Server speichert keine Sitzungsinformationen.
  2. Ressourcenorientiert: URLs stellen Ressourcen dar, wie /users, /products oder /orders, und HTTP-Methoden definieren die Aktionen.
  3. HTTP-Methoden: RESTful-APIs verwenden HTTP-Methoden, um Aktionen anzugeben:
    • GET: Daten abrufen.
    • POST: Neue Ressourcen erstellen.
    • PUT: Vorhandene Ressourcen aktualisieren.
    • LÖSCHEN: Ressourcen entfernen.
  4. Verwendung von HTTP-Statuscodes: RESTful-APIs nutzen HTTP-Statuscodes gut (200 für Erfolg, 404 für nicht gefunden usw.).

Einrichten Ihres Go-Projekts

Lassen Sie uns eine grundlegende CRUD-API für die Benutzerverwaltung mit Go und dem Gorilla Mux-Router erstellen. Unsere API wird die folgenden Endpunkte haben:

HTTP Method Endpoint Action
GET /users Retrieve all users
GET /users/{id} Retrieve a specific user
POST /users Create a new user
PUT /users/{id} Update an existing user
DELETE /users/{id} Delete a user
HTTP-Methode Endpunkt Aktion GET /users Alle Benutzer abrufen GET /users/{id} Einen bestimmten Benutzer abrufen POST /users Neuen Benutzer erstellen PUT /users/{id} Aktualisieren Sie einen vorhandenen Benutzer LÖSCHEN /users/{id} Benutzer löschen

ステップ 1: 依存関係をインストールする

まず、ルーティング用の Gorilla Mux ルーターをインストールします。

go get -u github.com/gorilla/mux

まず、簡単な main.go ファイルを作成します。

package main

import (
    "log"
    "net/http"
    "github.com/gorilla/mux"
)

func main() {
    r := mux.NewRouter()

    // Define routes here
    http.Handle("/", r)

    log.Println("Server started on :8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

ステップ 2: ハンドラーを定義する

次に、API ハンドラーを定義しましょう。これらは CRUD アクションに対応します。この例では、単純なメモリ内マップを使用してユーザー データを保存します。

インメモリデータストア

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

var users = make(map[string]User)

ステップ 3: CRUD ハンドラーを実装する

各 CRUD 操作を実装します:作成読み取り更新、および 削除 ユーザー。

GET /users – すべてのユーザーを取得します
func getUsers(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    var userList []User
    for _, user := range users {
        userList = append(userList, user)
    }
    json.NewEncoder(w).Encode(userList)
}
GET /users/{id} – 特定のユーザーを取得します
func getUser(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    user, found := users[params["id"]]
    if !found {
        http.Error(w, "User not found", http.StatusNotFound)
        return
    }
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(user)
}
POST /users – 新しいユーザーの作成
func createUser(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    var user User
    _ = json.NewDecoder(r.Body).Decode(&user)
    users[user.ID] = user
    w.WriteHeader(http.StatusCreated)
    json.NewEncoder(w).Encode(user)
}
PUT /users/{id} – 既存のユーザーを更新します
func updateUser(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    user, found := users[params["id"]]
    if !found {
        http.Error(w, "User not found", http.StatusNotFound)
        return
    }
    _ = json.NewDecoder(r.Body).Decode(&user)
    user.ID = params["id"]  // Ensure the ID stays the same
    users[params["id"]] = user
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(user)
}
DELETE /users/{id} – ユーザーを削除します
func deleteUser(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    _, found := users[params["id"]]
    if !found {
        http.Error(w, "User not found", http.StatusNotFound)
        return
    }
    delete(users, params["id"])
    w.WriteHeader(http.StatusNoContent)
}

ステップ 4: ルートを登録する

ハンドラーを定義したので、メイン関数でルーターにルートを追加しましょう。

func main() {
    r := mux.NewRouter()

    r.HandleFunc("/users", getUsers).Methods("GET")
    r.HandleFunc("/users/{id}", getUser).Methods("GET")
    r.HandleFunc("/users", createUser).Methods("POST")
    r.HandleFunc("/users/{id}", updateUser).Methods("PUT")
    r.HandleFunc("/users/{id}", deleteUser).Methods("DELETE")

    http.Handle("/", r)

    log.Println("Server started on :8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

ステップ 5: API をテストする

Postman またはcurl コマンドを使用して API をテストできます。新しいユーザーを作成し、ユーザーを取得する方法は次のとおりです:

  1. 新しいユーザーを作成します:
   curl -X POST http://localhost:8080/users \
   -H "Content-Type: application/json" \
   -d '{"id":"1", "name":"John Doe", "age":30}'
  1. すべてのユーザーを取得:
   curl -X GET http://localhost:8080/users
  1. 特定のユーザーを取得:
   curl -X GET http://localhost:8080/users/1
  1. ユーザーを更新:
   curl -X PUT http://localhost:8080/users/1 \
   -H "Content-Type: application/json" \
   -d '{"name":"John Smith", "age":31}'
  1. ユーザーを削除:
   curl -X DELETE http://localhost:8080/users/1

RESTful API を構築するためのベスト プラクティス

  1. 適切な HTTP メソッドを使用する: 読み取りには GET、作成には POST、更新には PUT、削除には DELETE を使用して、RESTful 原則に従います。
  2. 適切なステータス コードを返す: 常に正しい HTTP ステータス コードを使用します (例: リソース作成が成功した場合は 201 Created、リソースが見つからない場合は 404 Not Found)。
  3. エラーを適切に処理します: 内部エラーをユーザーに公開しません。 「ユーザーが見つかりません」や「無効なリクエスト」などの一般的なメッセージを使用します。
  4. 大規模なデータ セットにはページネーションを使用する: 大きなリスト (/users など) を返す場合は、過剰なデータの読み込みを防ぐためにページネーションを実装します。
  5. API を保護する: JWT や OAuth2 などの認証方法を使用して、機密性の高いエンドポイントを保護します。

次は何ですか?

基本的な RESTful API を構築したので、データベース サポートを統合して、データを永続化できるようにします。次回の投稿では、ORM を使用して Go API をデータベースに接続する方法について詳しく説明します。パート 3 をお楽しみに! ?

Das obige ist der detaillierte Inhalt vonErstellen von RESTful-APIs mit Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn