Mở đầu
Quay trở lại với Series BizflyCloud App Engine Tutorials, Series bao gồm các bài viết hướng dẫn triển khai tất cả loại ứng dụng được viết bằng nhiều ngôn ngữ khác nhau lên trên nền tảng BizflyCloud App Engine. Nếu là một developer thì dù là Backend Dev hay Fontend Dev thì chắc chắn bạn cũng đã làm việc kha khá lần với API. Trong bài viết ngày hôm nay mình sẽ hướng dẫn mọi người triển khai Rest API được viết bằng Golang. Sau bài viết này hy vọng mọi người sẽ biết thêm được một nền tảng mới giúp mọi người triển khai ứng dụng một cách nhanh chóng và tiện lợi. Không tốn thêm thời gian nữa chúng ta cùng nhau triển khai ứng dụng này nhé.
Điều kiện tiên quyết
Để có thể thực hành bài viết này bạn cần có một số thứ như sau:
- Tài khoản tại BizflyCloud, nếu chưa có bạn có thể tạo ngay tại đây. Tạo tài khoản chỉ mất vài phút thôi. Dịch vụ App Engine đang được sử dụng miễn phí tài nguyên lên đến 8CPU-16GB Memory để bạn có thể thoải mái triển khai đủ loại ứng dụng.
- Repo code Golang bất kỳ.
Source code
Trong bài viết này mình sẽ mượn tạm code tại Repo tìm được trên GitHub:
https://github.com/PhongVX/golang-rest-api
Mình giải thích qua một chút về chức năng, ứng dụng này cho phép:
- Tạo User
- Sửa User
- Xóa User
- Cập nhật thông tin User
- Lấy thông tin 1 hoặc toàn bộ User
Khá đơn giản đúng không 😁, Các bạn có thể thử triển khai ứng dụng này luôn hoặc triển khai ứng dụng Golang của bản thân nhé!
Ứng dụng này khi chạy sẽ lắng nghe tại cổng 5000, đây là thông số ta cần lưu ý để điền vào khi tạo service. Nếu muốn hiểu thêm về source code bạn có thể đọc trong bài viết được đính kèm trong repo.
Tạo App
Trước khi bạn muốn triển khai một ứng dụng bạn cần tạo App trước, App này có mục đích chứa những ứng dụng liên quan đến nhau. Ở đây mình đã tạo sẵn App có tên example nên sử dụng luôn
Tạo Service
Service sẽ là ứng dụng của bạn chạy ở trên App Engine. Để triển khai thêm ứng dụng Golang ta chọn Tạo Service.
Tiếp theo ta nhập một số trường thông tin cần thiết để triển khai ứng dụng.
- Tên Service: Tên của Service nhằm mục đích gợi nhớ
- Location: Vị trí mà bạn muốn triển khai ứng dụng.
- Source type: Bạn có thể chọn triển khai ứng dụng từ nguồn Git hoặc Image.
- Source URL: Vì chúng ta triển khai bằng git nên đây sẽ là đường dẫn tới repo chứa source code.
- Branch: Nhánh repo mà bạn muốn triển khai. Bạn có thể triển khai nhiều phiên bản của ứng dụng như (dev, staging, production) bằng chức năng này.
- Cấu hình: Cấu hình hạ tầng chạy ứng dụng.
- Replicas: Số lượng bản sao – Càng nhiều bản sao thì hạ tầng càng lớn và khả năng ổn định càng cao.
- Port: Cổng mà ứng dụng sẽ chạy. Đây là thông số mình đã lưu ý với mọi người ở trên.
- Loại ứng dụng: Vì ứng dụng của chúng ta chạy giao thức HTTP nên mình sẽ chọn ứng dụng loại HTTP
Sau khi điền xong một vài thông tin như trên là bạn đã có thể triển khai ứng dụng ngay bằng các chọn Xác nhận thông tin service
Quá trình xây dựng ứng dụng sẽ ngay lập tức được triển khai và cập nhật liên tục
Sau khi triển khai xong hệ thống sẽ trả về cho bạn một URL để truy cập vào ứng dụng đã triển khai như hình:
Hệ thống xây dựng ứng dụng thế nào?
App Engine của BizflyCloud sử dụng công nghệ Buildpack để đóng gói ứng dụng của bạn dựa trên những file đặc trưng, để hiểu ứng dụng của bạn được đóng gói thế nào bạn có thể xem** Build Logs** tại mục Logs bên thanh menu bên trái. Build Logs của ứng dụng Golang này sẽ như sau:
[2023-01-25 15:43:04.401][ INFO ]: ===> ANALYZING
[2023-01-25 15:43:04.425][ INFO ]: Previous image with name "**********************************/****************************/go-rest-api-nnwpu:latest" not found
[2023-01-25 15:43:04.435][ INFO ]: ===> DETECTING
[2023-01-25 15:43:04.493][ INFO ]: 1 of 2 buildpacks participating
[2023-01-25 15:43:04.505][ INFO ]: heroku/go 0.0.0
[2023-01-25 15:43:04.514][ INFO ]: ===> RESTORING
[2023-01-25 15:43:04.521][ INFO ]: ===> BUILDING
[2023-01-25 15:43:16.960][ INFO ]:-----> Fetching jq... done
[2023-01-25 15:43:17.996][ INFO ]:-----> Fetching stdlib.sh.v8... done
[2023-01-25 15:43:18.070][ INFO ]:----->[2023-01-25 15:43:18.083][ INFO ]: Detected go modules via go.mod
[2023-01-25 15:43:18.094][ INFO ]:----->[2023-01-25 15:43:18.106][ INFO ]:Detected Module Name: github.com/PhongVX/golang-rest-api
[2023-01-25 15:43:18.115][ INFO ]:----->[2023-01-25 15:43:18.123][ INFO ]:-----> New Go Version, clearing old cache
[2023-01-25 15:43:18.139][ INFO ]:-----> Installing go1.12.17
[2023-01-25 15:43:39.520][ INFO ]:-----> Fetching go1.12.17.linux-amd64.tar.gz... done
[2023-01-25 15:43:39.641][ INFO ]:-----> Determining packages to install
[2023-01-25 15:43:39.673][ INFO ]:go: finding github.com/gorilla/mux v1.7.3
[2023-01-25 15:43:45.039][ INFO ]:go: downloading github.com/gorilla/mux v1.7.3
[2023-01-25 15:43:45.091][ INFO ]:go: extracting github.com/gorilla/mux v1.7.3
[2023-01-25 15:43:45.123][ INFO ]:[2023-01-25 15:43:45.133][ INFO ]:Detected the following main packages to install:[2023-01-25 15:43:45.141][ INFO ]: github.com/PhongVX/golang-rest-api
[2023-01-25 15:43:45.149][ INFO ]:[2023-01-25 15:43:45.156][ INFO ]:-----> Running: go install -v -tags heroku github.com/PhongVX/golang-rest-api
[2023-01-25 15:43:45.287][ INFO ]: github.com/PhongVX/golang-rest-api/entities
[2023-01-25 15:43:45.298][ INFO ]: github.com/gorilla/mux
[2023-01-25 15:43:45.306][ INFO ]: github.com/PhongVX/golang-rest-api/models
[2023-01-25 15:43:45.318][ INFO ]: github.com/PhongVX/golang-rest-api/apis/userapi
[2023-01-25 15:43:45.410][ INFO ]: github.com/PhongVX/golang-rest-api
[2023-01-25 15:43:46.416][ INFO ]:[2023-01-25 15:43:46.426][ INFO ]:Installed the following binaries:[2023-01-25 15:43:46.435][ INFO ]: ./bin/golang-rest-api
[2023-01-25 15:43:46.472][ INFO ]:[2023-01-25 15:43:46.482][ INFO ]:Created a Procfile with the following entries:[2023-01-25 15:43:46.491][ INFO ]:web: bin/golang-rest-api
[2023-01-25 15:43:46.500][ INFO ]:[2023-01-25 15:43:46.508][ INFO ]: If these entries look incomplete or incorrect please create a Procfile with the required entries.
[2023-01-25 15:43:46.516][ INFO ]: See https://devcenter.heroku.com/articles/procfile for more details about Procfiles
[2023-01-25 15:43:46.523][ INFO ]:[2023-01-25 15:43:46.531][ INFO ]: ===> EXPORTING
[2023-01-25 15:43:46.538][ INFO ]: Adding layer 'heroku/go:profile'
[2023-01-25 15:43:46.546][ INFO ]: Adding layer 'launch.sbom'
[2023-01-25 15:43:46.570][ INFO ]: Adding 1/1 app layer(s)
[2023-01-25 15:43:46.580][ INFO ]: Adding layer 'launcher'
[2023-01-25 15:43:46.588][ INFO ]: Adding layer 'config'
[2023-01-25 15:43:46.596][ INFO ]: Adding layer 'process-types'
Sẽ có các bước như sau: ANALYZING => DETECTING => RESTORING => BUILDING => EXPORTING. Về cơ bản các bước này sẽ phát triển ngôn ngữ của ứng dụng và đưa ra các câu lệnh phù hợp để cài đặt dependencies, package hay chọn Runtime version cho phù hợp.
Đối với ứng dụng Golang hệ thống sẽ tìm và đọc file go.mod để cài đặt và cấu hình hệ thống cho phù hợp để chạy ứng dụng trong bước DETECTING
Nội dung go.mod file:
module github.com/PhongVX/golang-rest-api
go 1.12
require github.com/gorilla/mux v1.7.3 // indirect
Sau đó tại bước BUILDING hệ thống sẽ chạy các câu lệnh để cài module (github.com/PhongVX/golang-rest-api), package (github.com/gorilla/mux v1.7.3) và chọn Golang version 1.12.
Thử nghiệm
Như vậy chúng ta đã triển khai thành công ứng dụng Golang và hiểu cách ứng dụng này được xây dựng trên BFC App Engine. Giờ ta sẽ thử nghiệm xem chức năng có hoạt động đúng hay không. Bạn có thể sử dụng bất cứ công cụ nào để gửi request lên server như Postman, browser, Curl,… còn mình sẽ hướng dẫn sử dụng curl.
Tạo user
curl -X POST https://example-nnwpu.appengine.bfcplatform.vn/go-rest-api/api/v1/user/create
-H "Content-Type: application/json"
-d '{"id": "001","name":"BFC-User","password":"123456"}'
Lấy tất cả user
curl https://example-nnwpu.appengine.bfcplatform.vn/go-rest-api/api/v1/user/getall
Response trả về có nội dung:
[{"id":"001","name":"BFC-User","password":"123456"}]
Như vậy chức năng đã hoạt động như ý muốn 😅. Các bạn có thể thử thêm với chức năng: Xóa, sửa,…
Vậy là chúng ta đã triển khai thành công ứng dụng Golang Rest API!
Kết
Nền tảng BFC App Engine được sinh ra nhằm đơn giản hóa quá trình triển khai ứng dụng cho các developers, hiện nền tảng này đang trong quá trình phát triển, hy vọng mọi người sẽ sử dụng và cho mình những góp ý về sản phẩm. Nếu thấy bài viết hay và muốn theo dõi thêm các bài viết khác của mình thì mọi người hay Upvote và Follow mình nhé. Cám ơn mọi người đã dành thời gian đọc bài viết, hẹn gặp trong bài viết tiếp theo.
À quên, Chúc mừng năm mới 🎆🎆🎆. Chúc mọi người năm mới vạn sự như ý, code không có bug, hệ thống không bao giờ down 😁
Nguồn: viblo.asia