Golang は、同時実行性の高いサービスとネットワーク アプリケーションを構築するために特別に設計されたプログラミング言語です。 Golang は効率的な同時実行性とネットワーク プログラミング機能を備えているため、多くの開発者が最初に選択します。 Golang API を構築するには、ルーティング処理からデータベース アクセスなどに至るまで、多くの基本的な概念とスキルを習得する必要があります。この記事では、Golang を使用して API を構築する方法を紹介します。
1. 環境の準備
Golang API の構築を開始する前に、コンピューターに Golang をインストールする必要があります。最新バージョンの Golang は、Golang 公式 Web サイト (https://golang.org/) からダウンロードするか、apt-get や yum などのパッケージ マネージャーを通じてインストールできます。インストールが完了したら、ターミナルに「go version」と入力して、インストールが成功したかどうかを確認します。
2. 依存関係パッケージのインストール
ターミナルで「go get」コマンドを使用して、必要な依存関係パッケージをインストールします。依存パッケージは、「gorilla/mux」や「gorm」など、API でよく使用されるライブラリです。インストール方法は以下のとおりです:
go get github.com/gorilla/mux go get github.com/jinzhu/gorm go get github.com/go-sql-driver/mysql
3. ルーティング処理
すべての API リクエストはルーティングを通じて完了する必要があります。 Golang で最も人気のあるルーティング パッケージの 1 つは Gorilla/mux なので、これも使用します。
Gorilla/mux を使用するには、パッケージをインポートして新しい mux オブジェクトを作成する必要があります。この例では、2 つのルートを作成します。1 つは API ホームページを表示するため、もう 1 つは GET リクエストを処理するためです。
package main import ( "fmt" "net/http" "github.com/gorilla/mux" ) func main() { router := mux.NewRouter() router.HandleFunc("/", Index) router.HandleFunc("/tasks", getTasks).Methods("GET") http.ListenAndServe(":8000", router) } func Index(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Welcome to my API!") } func getTasks(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "You have requested all tasks") }
上記のコードでは、Index と getTasks という 2 つの処理関数を作成しました。 Index 関数は API ホームページを表示するために使用され、getTasks はすべての GET リクエストを処理します。
4. データベース アクセス
次に、データベース機能を API に追加します。この例では、MySQL データベースを使用し、gorm ライブラリを使用してデータを管理します。
まず、データベース接続を作成する必要があります。これを行うには、接続の詳細を含むデータベース構造体を作成する必要があります。次に、接続を開くための新しい「openDB」関数を作成します。
... import ( "database/sql" "log" _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm" ) type Database struct { *gorm.DB } func (db *Database) openDB() { dsn := "username:password@tcp(127.0.0.1:3306)/godb?charset=utf8&parseTime=True" conn, err := sql.Open("mysql", dsn) if err != nil { log.Fatal(err) } db.DB = gorm.Open("mysql", conn) }
次に、main 関数で新しい Database オブジェクトを作成し、openDB 関数を使用して接続を開く必要があります。
db := new(Database) db.openDB()
次に、タスク リストに関連付けるタスク モデルを作成します。モデルは、MySQL データベース内のテーブルにマップされる通常の Go 構造体です。
type Task struct { Id int `gorm:"primary_key;auto_increment"` Name string `gorm:"not null"` Content string `gorm:"not null"` }
新しいタスクを作成するために、「createTask」というハンドラー関数を作成します。この関数は、HTTP リクエストから JSON データを受信し、解析してデータベースに挿入します。
func createTask(w http.ResponseWriter, r *http.Request) { db := new(Database) db.openDB() task := &Task{} task.Name = r.FormValue("name") task.Content = r.FormValue("content") db.Create(&task) fmt.Fprintln(w, "Task successfully created") }
「createTask」関数が最初に新しい Database オブジェクトと Task オブジェクトを作成することがわかります。次に、HTTP リクエストからの JSON データを解析し、db.Create() メソッドを呼び出してデータベースに挿入します。
最後に、ルート「router.HandleFunc」を更新して、新しいルートを含めます。
router.HandleFunc("/tasks", createTask).Methods("POST")
5. ミドルウェア
ミドルウェアは、リクエストの処理前または処理後に操作を実行するために使用される一般的なテクノロジです。これらは Golang だけでなく他の言語でも広く使用されています。ミドルウェアを使用して Golang API に追加機能を追加する方法を見てみましょう。
Golang では、ミドルウェアは HTTP 処理関数をパラメータとして受け取る関数です。これらにより、リクエストの処理前または処理後に一部のロジックを実行できます。次の例では、すべての API リクエストの詳細を記録する「withLogging」というミドルウェアを作成します。
func withLogging(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { log.Println(r.Method, r.URL.Path) next.ServeHTTP(w, r) }) }
新しい http.Handler 関数が関数内で返され、要求されたメソッドと URL パスが記録されていることがわかります。 next.ServeHTTP(w, r) ステートメントは次のハンドラーを呼び出し、ハンドラーが API リクエストの処理を継続できるようにします。
次に、ルートとハンドラーを更新して、新しいログ記録ミドルウェアを含めます。
router := mux.NewRouter() router.Use(withLogging) router.HandleFunc("/", Index) router.HandleFunc("/tasks", createTask).Methods("POST") router.HandleFunc("/tasks", getTasks).Methods("GET")
次に、ルートの前に「router.Use(withLogging)」ステートメントを追加します。これにより、すべてのルーティング リクエストで withLogging ミドルウェアが実行されます。
6. 概要
この記事では、Gorilla/Mux を使用して Golang でルーティングを処理する方法、gorm を使用して MySQL データベースを管理する方法、およびミドルウェアを使用して API を強化する方法を紹介しました。これらの基本的な概念とスキルを理解することで、より複雑な Golang API の構築を開始できるようになります。
以上がgolang APIビルドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。