<目次>
学習履歴
前回は、アプリ開発に必要な環境の構築を行なっていました。
前回
事前準備
開発に必要はディレクトリとファイルを用意します。
1 2 3 4 5 6 7 8 9 10 11 |
$ pwd /Users/hoge/Desktop/money-boy/api $ mkdir -p controllers/products $ touch controllers/products/product_controller.go $ mkdir -p domain/products $ touch domain/products/product.go $ mkdir services $ touch services/products_service.go $ mkdir app $ touch app/application.go $ touch app/url_mappings.go |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
api ├── app │ ├── application.go │ └── url_mappings.go ├── controllers │ └── products │ └── products_controller.go ├── domain │ └── products │ └── product.go ├── main.go └── services └── products_service.go |
Product APIの実装(簡易版)
Product APIを実装します。
Product APIとは、購入商品情報を取り扱うためのAPIです。例えば、ブラウザ上から商品情報を入力し、その情報をサーバーサイドに渡す、あるいは、購入した商品情報を自由に取得できるようします。
今回は、Ginフレームワークに慣れるという意味で、簡単なAPIを実装しましょう。
services
products_service.goには、ビジネスロジックを実装します。ただし、今回は割愛します。
domain
product.goには、DBにアクセスするためのstruct要素やORMを実装します。ただし、今回は割愛します。
app
application.goには、Ginを使ったHTTP Serverの実装を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// application.go package app import ( "log" "github.com/gin-gonic/gin" ) var ( // https://github.com/gin-gonic/gin#quick-start router = gin.Default() ) // StartApp - Start our application func StartApp() { mapUrls() log.Println("Start App...") router.Run(":8080") } |
docker コンテナを立ち上げると8080番ポートでHTTPサーバーが立ち上がるように実装しました。
url_mappings.goには、リクエスト先を一覧としてまとめておきます。
1 2 3 4 5 6 7 8 9 10 |
// url_mappings.go package app import "github.com/gouser/money-boy/api/controllers/products" func mapUrls() { router.GET("/products/:product_id", products.GetProduct) router.POST("/products", products.CreateProduct) } |
「localhost:8080/products/123」にアクセスすると「products.GetProduct」が呼び出されます。
controllers
products_controller.goには、ユーザーリクエストを適切に振り分ける役割を持ちます。例えば、domainにDB情報の取得を依頼したり、servicesに特定の処理を依頼したりですね。
今回は、「Not yet implement!」と返すだけにしておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// products_controller.go package products import ( "net/http" "github.com/gin-gonic/gin" ) // GetProduct - Get product by product id func GetProduct(c *gin.Context) { c.String(http.StatusNotImplemented, "Not yet implement!") } // CreateProduct - Create product func CreateProduct(c *gin.Context) { c.String(http.StatusNotImplemented, "Not yet implement!") } |
main.go
main.goには、application.goで実装したHTTP Serverを呼び出す処理を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 |
// main.go package main import ( "github.com/gouser/money-boy/api/app" ) func main() { app.StartApp() } |
動作確認
以下のコマンドで、dockerコンテナを立ち上げましょう。
1 |
docker-compose up |
curlを使って、リクエストを発行してみます。
1 2 3 4 5 |
curl -X GET localhost:8080/products/123 Not yet implement! curl -X POST localhost:8080/products Not yet implement! |
次回
次回も引き続き、Product APIを作成していきます。
コメントを残す
コメントを投稿するにはログインしてください。