Erstellen von RESTful-APIs mit Go

DDD
Freigeben: 2024-10-11 10:24:29
Original
381 Leute haben es durchsucht

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
Nach dem Login kopieren

まず、簡単な 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))
}
Nach dem Login kopieren

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

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

インメモリデータストア

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

var users = make(map[string]User)
Nach dem Login kopieren

ステップ 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)
}
Nach dem Login kopieren
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)
}
Nach dem Login kopieren
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)
}
Nach dem Login kopieren
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)
}
Nach dem Login kopieren
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)
}
Nach dem Login kopieren

ステップ 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))
}
Nach dem Login kopieren

ステップ 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}'
Nach dem Login kopieren
  1. すべてのユーザーを取得:
   curl -X GET http://localhost:8080/users
Nach dem Login kopieren
  1. 特定のユーザーを取得:
   curl -X GET http://localhost:8080/users/1
Nach dem Login kopieren
  1. ユーザーを更新:
   curl -X PUT http://localhost:8080/users/1 \
   -H "Content-Type: application/json" \
   -d '{"name":"John Smith", "age":31}'
Nach dem Login kopieren
  1. ユーザーを削除:
   curl -X DELETE http://localhost:8080/users/1
Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage