ไปตัวอย่างโครงการเพื่อทำความเข้าใจการดำเนินการ MySQL CRUD ด้วยแนวทางปฏิบัติที่ดีที่สุด
ร้านขายหนังสือตัวอย่างพร้อมการผลิต RESTFUL API พร้อม GO โดยใช้ Gorilla/Mux Uber/Zap Lumberjack พร้อม MySQL (ฐานข้อมูลเชิงสัมพันธ์ที่ดี), การตรวจสอบ JWT โครงการนี้มีการใช้ Golang ของ Swagger 2.0 (aka OpenAPI 2.0): มันรู้วิธีการทำให้เป็นอนุกรมและกำหนดข้อกำหนด Swagger
# Download this project
git clone github.com/err-him/go-book-store-apiก่อนที่จะเรียกใช้เซิร์ฟเวอร์ API คุณควรตั้งค่าการกำหนดค่าฐานข้อมูลด้วยของคุณหรือตั้งค่าการกำหนดค่าฐานข้อมูลของคุณด้วยค่าของฉันใน db/evv.local.json
{
"host" : "127.0.0.1",
"port" : "3306",
"uname" : "root",
"dbname" : "book_store",
"pass" : "root"
}
ขั้นตอนที่ 1: สร้างภาพนักเทียบท่าตาม DockerFile ตรวจสอบให้แน่ใจว่ามีการติดตั้ง Docker-compose ในระบบบิลด์ของคุณ สำหรับรายละเอียดเกี่ยวกับวิธีการทำเช่นนี้ดู: https://docs.docker.com/compose/install/
# This may take a few minutes.
$ docker-compose up -dสิ่งนี้จะสร้างสองคอนเทนเนอร์ในพื้นหลังสำหรับ GO และ MySQL ตามลำดับ
ขั้นตอนที่ 2:. กระบวนการข้างต้นจะสร้างคอนเทนเนอร์สองตัวและ db สำหรับแอปพลิเคชันเพื่อเติมข้อมูลบางส่วนใน DB Run
$ cat db.sql | docker exec -i full_db_mysql /usr/bin/mysql -u root --password=root book_store
ขั้นตอนที่ 3: เปิดเทอร์มินัลอื่นและเข้าถึงจุดสิ้นสุด API ตัวอย่าง
$ curl http://localhost:9002/health
{ " status " : " up " } หมายเหตุสำคัญ: ในขณะที่การตั้งค่า Docker เปลี่ยนโฮสต์ DB จาก 127.0.0.1 เป็น book-store-mysql เพราะในขณะที่สร้างภาพนักเทียบท่าเรากำลังพิสูจน์ชื่อโฮสต์ book-store-mysql อื่น ๆ ใช้ 127.0.0.1
Gorilla/Mux กำลังถูกใช้เพื่อตั้งค่าสำหรับการกำหนดเส้นทาง มีคุณสมบัติที่ทรงพลังเช่นการจัดกลุ่ม/มิดเดิลแวร์/ตัวจัดการ ฯลฯ
v1 := r.PathPrefix("/api/v1").Subrouter()
v1.HandleFunc("/genre/create", genreHandler.CreateGenre).Methods(http.MethodPost)
v1.HandleFunc("/genre/update", genreHandler.UpdateGenre).Methods(http.MethodPut)
v1.HandleFunc("/genre/get/all", genreHandler.GetAll).Methods(http.MethodGet)
v1.HandleFunc("/genre/get/{id}", genreHandler.GetOne).Methods(http.MethodGet)
v1.HandleFunc("/genre/delete/{id}", genreHandler.Delete).Methods(http.MethodDelete)
MySQL ถูกใช้เป็น ฐานข้อมูลฐานข้อมูล/SQL และ github.com/go-sql-driver/mysql โมดูลเพื่อสร้างและจัดการการเชื่อมต่อฐานข้อมูล
# Build and Run
cd go-book-store-api
make build # Build and Run
cd go-book-store-api
make APP_ENV= " local " run
# API Endpoint : http://127.0.0.1:9002 main.go -> Entry point of application
config -> folder to store all connection and routing related logic
config/app.go -> app run/db connection and routing Initialize
config/routes.go -> app routing defined here
config/driver/db.go -> mysql connection established Here
config/properties -> all application properties in JSON form stored Here, to read config file **https://github.com/err-him/gonf** package used
logger -> Folder contains application logging logic
logger/zap.go -> This contains the logger implementation logic. To implement **uber/zap** logger with **lumberjack** a log rolling package **https://github.com/err-him/gozap** package is being used
api -> Api package is used to receive an incoming request, validate the request for any bad input parameters. Generate a proper response after running our business logic.
api/constants -> contains all application related constants like http etc
api/controllers -> Contains handler functions for particular route to be called when an api is called.
api/models -> database tables to be used as models struct and interface provided for the repositories
api/handler -> basically contains the helper functions used in returning api responses, HTTP status codes, default messages etc.
api/repositories -> repository package is a wrapper on database and cache, so no other package can directly access the database. This package handle all create, update, fetch and delete operation on database tables or cache.
api/utils -> contains all application utility function.
db.sql -> file contains db schema and data information, dumped data from mysql
command for dump database => `mysqldump -u root -p book_store > /Users/himanshu/go-learning/book-store-api/db.sql`
swagger.yml -> swagger API documentation configuration
ข้อมูลจำเพาะ OpenAPI (สเปคเดิม Swagger) เป็นรูปแบบคำอธิบาย API สำหรับ REST API ไฟล์ OpenAPI ช่วยให้คุณสามารถอธิบาย API ทั้งหมดของคุณรวมถึง:
/users ) และการดำเนินการในแต่ละจุดสิ้นสุด ( GET /users , POST /users )ข้อกำหนด API สามารถเขียนได้ใน Yaml หรือ JSON รูปแบบนั้นง่ายต่อการเรียนรู้และอ่านได้ทั้งมนุษย์และเครื่องจักร ข้อมูลจำเพาะ OpenAPI ที่สมบูรณ์สามารถพบได้ใน GitHub: Specification OpenAPI 2.0, ข้อมูลจำเพาะ OpenAPI 3.0
Swagger เป็นชุดเครื่องมือโอเพนซอร์ซที่สร้างขึ้นรอบ ๆ ข้อกำหนดของ OpenAPI ที่สามารถช่วยคุณออกแบบสร้างเอกสารและใช้ APIs REST เครื่องมือ Swagger ที่สำคัญ ได้แก่ : Swagger ช่วยให้คุณสามารถอธิบายโครงสร้างของ API ของคุณเพื่อให้เครื่องสามารถอ่านได้ ความสามารถของ APIs ในการอธิบายโครงสร้างของตัวเองคือรากเหง้าของความสุดยอดทั้งหมดใน Swagger
Swagger สามารถเขียนได้ใน JSON หรือ Yaml ในคู่มือนี้เราใช้ตัวอย่าง YAML เท่านั้น แต่ JSON ทำงานได้ดีพอ ๆ กัน ข้อมูลจำเพาะตัวอย่างที่เขียนใน Yaml ดูเหมือนว่า:
swagger : " 2.0 "
info :
title : Sample API
description : API description in Markdown.
version : 1.0.0
host : api.example.com
basePath : /v1
schemes :
- https
paths :
/users :
get :
summary : Returns a list of users.
description : Optional extended description in Markdown.
produces :
- application/json
responses :
200 :
description : OK โครงการนี้มีการใช้ Golang ของ Swagger 2.0 (aka OpenAPI 2.0): มันรู้วิธีการทำให้เป็นอนุกรมและกำหนดข้อกำหนด Swagger
go-swagger นำชุมชน Go มาสู่ชุดที่สมบูรณ์แบบของส่วนประกอบ API ที่มีประสิทธิภาพสูงและมีประสิทธิภาพสูงเพื่อทำงานร่วมกับ API Swagger
การติดตั้ง Go Swagger เพื่อติดตั้ง Go Swagger in Mac พิมพ์คำสั่งต่อไปนี้
brew tap go-swagger/go-swagger
brew install go-swagger
เมื่อการติดตั้งเสร็จสมบูรณ์ไปที่โครงการ repo และสร้างเอกสาร Swagger โดยคำสั่งต่อไปนี้
swagger serve -F=swagger ./swagger.yml
ยังสร้าง makefile ที่ดีสำหรับสิ่งเดียวกันเพื่อวิ่งผ่าน Make Enter: make serve-swagger
** Swagger Ui ** 






โครงการนี้มีการใช้ Golang ของ Swagger 2.0 (aka OpenAPI 2.0): มันรู้วิธีการทำให้เป็นอนุกรมและกำหนดข้อกำหนด Swagger
go-swagger นำชุมชน Go มาสู่ชุดที่สมบูรณ์แบบของส่วนประกอบ API ที่มีประสิทธิภาพสูงและมีประสิทธิภาพสูงเพื่อทำงานร่วมกับ API Swagger
การติดตั้ง Go Swagger เพื่อติดตั้ง Go Swagger in Mac พิมพ์คำสั่งต่อไปนี้
brew tap go-swagger/go-swagger
brew install go-swagger
เมื่อการติดตั้งเสร็จสมบูรณ์ไปที่โครงการ repo และสร้างเอกสาร Swagger โดยคำสั่งต่อไปนี้
swagger serve -F=swagger ./swagger.yml
ยังสร้าง makefile ที่ดีสำหรับสิ่งเดียวกันเพื่อวิ่งผ่าน Make Enter: make serve-swagger
** Swagger Ui ** 






POST : สร้างประเภทPUT : ประเภทอัปเดตGET : รับประเภทที่ใช้งานทั้งหมดGET : รับหนึ่งประเภท - ระบุโดย ID หรือประเภท SlugDELETE : ลบประเภท - soft delete โดย id หรือ slug ที่ระบุ POST : สร้างผู้เผยแพร่PUT : อัปเดตผู้เผยแพร่GET : รับผู้เผยแพร่ทั้งหมดที่ใช้งานอยู่GET : รับหนึ่งผู้เผยแพร่ - ระบุโดย ID หรือประเภท SlugDELETE : ลบผู้เผยแพร่ - Soft DELETE โดย ID หรือ Slug ที่ระบุ POST : สร้างผู้แต่งPUT : Update AuthorGET : รับผู้แต่งที่ใช้งานอยู่ทั้งหมดGET : รับหนึ่งผู้แต่ง - ระบุโดย ID หรือประเภท SlugDELETE : ลบผู้แต่ง - Soft DELETE โดย ID หรือ SLUG ที่ระบุ POST : สร้างหนังสือPUT : Update BookGET : รับหนังสือทั้งหมดGET : รับหนังสือเล่มหนึ่ง - ระบุโดย IDDELETE : DELETE BOOK - SOFT DELETE โดย IDGET : Search Book - ตามชื่อ POST : สร้างผู้ใช้PUT : ตรวจสอบหนังสือ อย่าลังเลที่จะเปิดปัญหาหากคุณเจอข้อบกพร่องใด ๆ หรือหากคุณต้องการขอคุณสมบัติใหม่
git checkout -b new-feature )git commit -am 'Some cool changes' )git push origin new-feature )