RESTful API は Go 言語でどのように実装されますか?
インターネットとモバイル アプリケーションの発展に伴い、RESTful API は一般的なインターフェイス設計スタイルになりました。 RESTful API はシンプルでスケーラブルで効率的であるため、アプリケーションのインターフェイスとして RESTful API を選択する企業や開発者が増えています。 Go 言語では、RESTful API を実装するのが非常に一般的です。この記事では、Go 言語での RESTful API の実装といくつかのベスト プラクティスを紹介します。
1. RESTful API とは何ですか?
RESTful API は、REST (Representational State Transfer) アーキテクチャに基づいた Web サービス インターフェイスです。通信には HTTP プロトコルを使用し、さまざまな HTTP メソッドを通じてサーバー リソースに対する CRUD (作成、読み取り、更新、削除) 操作を実装します。これらの HTTP メソッドには、GET、POST、PUT、DELETE などが含まれます。 RESTful APIはリソースの識別と状態変換を重視しており、各リソースはリソースを識別するための一意のURI(Uniform Resource Identifier)を持ち、HTTPメソッドを使用して状態を変換します。
2. Go 言語で RESTful API を実装するための基本手順
1. 必要なライブラリをインストールする
Go 言語で RESTful API を実装するには、いくつかの共通パッケージを使用する必要があります。 net/http、encoding/json など。これらのライブラリのインストールは非常に簡単で、ターミナルで次のコマンドを実行するだけです:
go get -u github.com/gorilla/mux go get -u github.com/rs/cors
その中でも、ゴリラ/マルチプレクサ ライブラリは、Go 言語で最も人気のある HTTP リクエスト ルーターの 1 つであり、強力な HTTP ルーティングを提供します。機能。 rs/cors ライブラリを使用すると、クロスオリジン リソース共有 (CORS) を簡単に処理できます。
2. RESTful API ルートの作成
Go 言語では、mux パッケージを使用して RESTful API ルートを作成できます。まず、mux パッケージをインポートして、新しいルーターを定義する必要があります。次に、ルーターの HandleFunc メソッドを使用して、さまざまな HTTP メソッドとルーティング パスをハンドラー関数にマッピングできます。たとえば、次は RESTful API を実装する簡単な例です。
package main import ( "encoding/json" "log" "net/http" "github.com/gorilla/mux" "github.com/rs/cors" ) type Book struct { ID string `json:"id"` Title string `json:"title"` } var books []Book func main() { router := mux.NewRouter() // Get all books router.HandleFunc("/books", getBooks).Methods("GET") // Get a book by ID router.HandleFunc("/books/{id}", getBook).Methods("GET") // Add a book router.HandleFunc("/books", addBook).Methods("POST") // Update a book router.HandleFunc("/books/{id}", updateBook).Methods("PUT") // Delete a book router.HandleFunc("/books/{id}", deleteBook).Methods("DELETE") handler := cors.Default().Handler(router) log.Fatal(http.ListenAndServe(":8080", handler)) } func getBooks(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(books) } func getBook(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) for _, item := range books { if item.ID == params["id"] { json.NewEncoder(w).Encode(item) return } } json.NewEncoder(w).Encode(&Book{}) } func addBook(w http.ResponseWriter, r *http.Request) { var book Book _ = json.NewDecoder(r.Body).Decode(&book) books = append(books, book) json.NewEncoder(w).Encode(book) } func updateBook(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) for index, item := range books { if item.ID == params["id"] { books[index].Title = params["title"] json.NewEncoder(w).Encode(books[index]) return } } json.NewEncoder(w).Encode(books) } func deleteBook(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) for index, item := range books { if item.ID == params["id"] { books = append(books[:index], books[index+1:]...) break } } json.NewEncoder(w).Encode(books) }
上記のコードでは、Book 構造体と Books 配列を定義します。 mux.NewRouter() を使用して新しいルーターを作成し、router.HandleFunc() メソッドを使用して HTTP メソッドとルーティング パスを RESTful API ハンドラー関数にマップします。たとえば、関数 getBooks() は GET /books リクエストを処理し、json.NewEncoder() を介してブックス配列をエンコードし、それを ResponseWriter に書き込みます。
main() 関数では、cors.Default().Handler() メソッドを使用して新しい CORS ハンドラーを作成し、http.ListenAndServe() メソッドを使用して RESTful API サービスを開始し、デフォルトのポート 8080 をリッスンします。
3. 転送オブジェクト パターン (DTO) を使用する
RESTful API の設計では、クライアントで使用される単純なデータ構造である転送オブジェクト (DTO) を定義する必要があります。サーバーとの間でデータを転送します。 Go言語では構造体(struct)をDTOとして使うことができます。各構造はデータのタイプを表し、クライアントに送信されるフィールドが含まれています。たとえば、次のコードは User 構造を定義します。
type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` Password string `json:"-"` }
上記のコードでは、ID、Name、Email、および Password フィールドを含む User 構造を定義します。 json タグを使用して構造体フィールドを JSON 形式に変換します。パスワードがクリア テキストでクライアントに渡されることを避けるために、「-」フラグを使用してパスワード フィールドを無視することに注意してください。
4. HTTPS を使用して RESTful API を保護する
RESTful API は HTTP プロトコルを通じて通信するため、セキュリティが影響を受ける可能性があります。 RESTful APIのセキュリティを確保するために、HTTPS(HTTP Secure)プロトコルを使用して通信内容を保護できます。 HTTPS プロトコルは、SSL (Secure Socket Layer) または TLS (Transport Layer Security) 暗号化テクノロジを使用して、HTTP リクエストと応答のセキュリティを確保します。
Go 言語では、net/http パッケージと crypto/tls パッケージを使用して HTTPS をサポートできます。たとえば、次のコードは、自己署名証明書を使用して HTTPS サーバーを作成する方法を示しています。
package main import ( "log" "net/http" "crypto/tls" ) func main() { mux := http.NewServeMux() // Define HTTP routes // Create self-signed certificate cert, err := tls.LoadX509KeyPair("cert.pem", "key.pem") if err != nil { log.Fatal(err) } // Create HTTPS server server := &http.Server{ Addr: ":8443", TLSConfig: &tls.Config{ Certificates: []tls.Certificate{cert}, }, } // Start HTTPS server log.Fatal(server.ListenAndServeTLS("", "")) }
上記のコードでは、http.NewServeMux() を使用して新しい HTTP ルーターを作成し、その後 tls を使用します。 LoadX509KeyPair() 自己署名証明書をロードします。最後に、http.Server.ListenAndServeTLS() メソッドを使用して HTTPS サーバーを起動し、証明書構成を TLSConfig に渡します。
5. JWT を使用して RESTful API を保護する
RESTful API を開発するときは、許可されたユーザーのみがアクセスできるように API を保護する必要もあります。一般的なアプローチは、認証と認可に JWT (JSON Web Token) を使用することです。
Go 言語では、jwt-go パッケージを使用して JWT を生成および検証できます。たとえば、次のコードは、jwt-go パッケージを使用して JWT を作成および検証する方法を示しています。
package main import ( "fmt" "time" "github.com/dgrijalva/jwt-go" ) func main() { // Define a claim claim := jwt.MapClaims{ "user_id": 1234, "iss": "myapp", "exp": time.Now().Add(time.Hour * 24).Unix(), } // Create a new JWT token := jwt.NewWithClaims(jwt.SigningMethodHS256, claim) // Sign the JWT using a secret key secret := []byte("mysecret") signedToken, err := token.SignedString(secret) if err != nil { fmt.Println(err) } fmt.Println("JWT:", signedToken) // Verify the JWT token, err = jwt.Parse(signedToken, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) } return secret, nil }) if err != nil { fmt.Println(err) } if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { fmt.Println("JWT claims:", claims) } else { fmt.Println("Invalid JWT") } }
上記のコードでは、MapClaims 変数を宣言として定義しました。これは、JWT の JSON ペイロードに対応しており、任意のキーと値のペアを含めることができます。 JWT の有効期限を 24 時間に設定します。次に、 jwt.NewWithClaims() メソッドを使用して新しい JWT を作成し、jwt.SigningMethodHS256 を使用して署名アルゴリズムを指定します。次に、 jwt.Token.SignedString() メソッドを使用して、秘密鍵で JWT に署名します。
JWT を検証するときは、 jwt.Parse() メソッドを使用して JWT を解析し、JWT の署名を検証するコールバック関数を指定します。コールバック関数は、JWT の署名に使用されるキーを表す、interface{} 型の値を返す必要があります。上記のコードではハードコードされたキーを使用していますが、通常はキーを安全な場所に保存し、環境変数または構成ファイルを介して設定します。
6.結論
この記事では、Go 言語で RESTful API を実装するための基本的な手順を紹介します。 mux パッケージを使用してルーターを作成し、HTTP メソッドとルーティング パスを RESTful API ハンドラーにマップします。 RESTful API を保護するための JWT や HTTPS などのセキュリティ対策についても説明します。最後に、RESTful API の設計と実装を簡素化するためにトランスポート オブジェクト パターンを使用することの重要性についても強調します。
以上がRESTful API は Go 言語でどのように実装されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

GO言語で構造を定義する2つの方法:VARとタイプのキーワードの違い。構造を定義するとき、GO言語はしばしば2つの異なる執筆方法を見ます:最初...

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...

ポインター構文とviperライブラリの使用における問題への取り組みGO言語でプログラミングするとき、特にポインターの構文と使用を理解することが重要です...
