- vừa được xem lúc

Triển khai Golang Rest API trên BizflyCloud App Engine

0 0 22

Người đăng: Hoàng Việt

Theo Viblo Asia

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:

https://example-nnwpu.appengine.bfcplatform.vn/go-rest-api/

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 UpvoteFollow 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 😁

Bình luận

Bài viết tương tự

- vừa được xem lúc

gRPC - Nó là gì và có nên sử dụng hay không?

Nhân một ngày rảnh rỗi, mình ngồi đọc lại RPC cũng như gRPC viết lại để nhớ lâu hơn. Vấn đề là gì và tại sao cần nó .

0 0 132

- vừa được xem lúc

Embedded Template in Go

Getting Start. Part of developing a web application usually revolves around working with HTML as user interface.

0 0 57

- vừa được xem lúc

Tạo Resful API đơn giản với Echo framework và MySQL

1. Giới thiệu.

0 0 61

- vừa được xem lúc

Sử dụng goquery trong golang để crawler thông tin các website Việt Nam bị deface trên mirror-h.org

. Trong bài viết này, mình sẽ cùng mọi người khám phá một package thu thập dữ liệu có tên là goquery của golang. Mục tiêu chính của chương trình crawler này sẽ là lấy thông tin các website Việt Nam bị deface (là tấn công, phá hoại website, làm thay đổi giao diện hiển thị của một trang web, khi người

0 0 237

- vừa được xem lúc

Tạo ứng dụng craw dữ liệu bing với Golang, Mysql driver

Chào mọi người . Lâu lâu ta lại gặp nhau 1 lần, để tiếp tục series chia sẻ kiến thức về tech, hôm nay mình sẽ tìm hiểu và chia sẻ về 1 ngôn ngữ đang khá hot trong cộng đồng IT đó là Golang.

0 0 76

- vừa được xem lúc

Golang: Rest api and routing using MUX

Routing with MUX. Let's create a simple CRUD api for a blog site. # All . GET articles/ .

0 0 55