ホームページ >バックエンド開発 >Golang >Go を使用した RESTful API の構築

Go を使用した RESTful API の構築

DDD
DDDオリジナル
2024-10-11 10:24:29433ブラウズ

Building RESTful APIs with Go

フルスタック開発者のためのバックエンド エンジニアリング シリーズのパート 2 へようこそ! ?今日は、最も基本的なトピックの 1 つである、Go を使用した RESTful API の構築 について詳しく説明します。内部ツールを構築する場合でも、パブリック API を構築する場合でも、RESTful エンドポイントを構造化して実装する方法を理解することが重要です。

この投稿では以下について説明します:

  • API を RESTful にするもの (およびそれが重要な理由)。
  • エンドポイントを設計し、HTTP メソッドを処理する方法。
  • Go の net/http パッケージと Gorilla Mux を使用したシンプルな CRUD API の構築。
  • JSON リクエストとレスポンス の処理

最後までに、Go でスケーラブルな RESTful API を設計および実装する方法をしっかりと理解できるようになります。始めましょう! ?


API を RESTful にするものは何ですか? ?

コードの説明に入る前に、API が RESTful になる理由を簡単に説明しましょう。 REST (Representational State Transfer) は、次の原則に従った API を構築するためのアーキテクチャ スタイルです。

  1. ステートレス: クライアントからの各リクエストには、処理に必要なすべての情報が含まれている必要があります。サーバーはセッション情報を保存しません。
  2. リソース指向: URL は /users、/products、/orders などのリソースを表し、HTTP メソッドはアクションを定義します。
  3. HTTP メソッド: RESTful API は HTTP メソッドを使用してアクションを指定します。
    • GET: データを取得します。
    • POST: 新しいリソースを作成します。
    • PUT: 既存のリソースを更新します。
    • 削除: リソースを削除します。
  4. HTTP ステータス コードの使用: RESTful API は、HTTP ステータス コード (成功の場合は 200、見つからない場合は 404 など) を有効に利用します。

Go プロジェクトのセットアップ

Go と Gorilla Mux ルーターを使用してユーザーを管理するための基本的な CRUD API を構築しましょう。私たちの API には次のエンドポイントがあります:

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 メソッド エンドポイント アクション 取得 /ユーザー すべてのユーザーを取得 取得 /users/{id} 特定のユーザーを取得する 投稿 /ユーザー 新しいユーザーを作成する 置く /users/{id} 既存のユーザーを更新する 削除 /users/{id} ユーザーを削除する テーブル>

Étape 1 : Installer les dépendances

Tout d'abord, installez le routeur Gorilla Mux pour le routage :

go get -u github.com/gorilla/mux

Créez un simple fichier main.go pour commencer :

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))
}

Étape 2 : définir les gestionnaires

Maintenant, définissons nos gestionnaires d'API. Celles-ci correspondront à nos actions CRUD. Nous utiliserons une simple carte en mémoire pour stocker les données utilisateur pour cet exemple.

Magasin de données en mémoire

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

var users = make(map[string]User)

Étape 3 : implémenter les gestionnaires CRUD

Nous implémenterons chaque opération CRUD : Créer, Lire, Mettre à jour et Supprimer utilisateurs.

GET /users – Récupérer tous les utilisateurs
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} – Récupérer un utilisateur spécifique
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 – Créer un nouvel utilisateur
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} – Mettre à jour un utilisateur existant
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} – Supprimer un utilisateur
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)
}

Étape 4 : Enregistrer les itinéraires

Maintenant que nous avons défini nos gestionnaires, ajoutons les routes à notre routeur dans la fonction principale :

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))
}

Étape 5 : tester l'API

Vous pouvez tester votre API à l'aide de Postman ou des commandes curl. Voici comment créer un nouvel utilisateur et récupérer des utilisateurs :

  1. Créer un nouvel utilisateur :
   curl -X POST http://localhost:8080/users \
   -H "Content-Type: application/json" \
   -d '{"id":"1", "name":"John Doe", "age":30}'
  1. Obtenir tous les utilisateurs :
   curl -X GET http://localhost:8080/users
  1. Obtenir un utilisateur spécifique :
   curl -X GET http://localhost:8080/users/1
  1. Mettre à jour un utilisateur :
   curl -X PUT http://localhost:8080/users/1 \
   -H "Content-Type: application/json" \
   -d '{"name":"John Smith", "age":31}'
  1. Supprimer un utilisateur :
   curl -X DELETE http://localhost:8080/users/1

Meilleures pratiques pour créer des API RESTful

  1. Utilisez les méthodes HTTP appropriées : suivez les principes RESTful en utilisant GET pour les lectures, POST pour les créations, PUT pour les mises à jour et DELETE pour les suppressions.
  2. Renvoyer les codes d'état appropriés : utilisez toujours les codes d'état HTTP corrects (par exemple, 201 Créé pour une création de ressource réussie, 404 Introuvable pour les ressources manquantes).
  3. Gérez les erreurs avec élégance : n'exposez pas les erreurs internes aux utilisateurs. Utilisez des messages génériques tels que « Utilisateur introuvable » ou « Demande invalide ».
  4. Utiliser la pagination pour les grands ensembles de données : lors du renvoi de grandes listes (comme /users), implémentez la pagination pour éviter un chargement excessif des données.
  5. Sécurisez votre API : utilisez des méthodes d'authentification telles que JWT ou OAuth2 pour sécuriser les points de terminaison sensibles.

Quelle est la prochaine étape ?

Maintenant que nous avons créé une API RESTful de base, il est temps d'intégrer la prise en charge de la base de données afin que nous puissions conserver nos données. Dans le prochain article, nous aborderons l'utilisation d'un ORM pour connecter notre API Go à une base de données. Restez à l'écoute pour la partie 3 ! ?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。