Go Contoh Proyek Untuk Memahami Operasi MySQL CRUD dengan Praktik Terbaik
Toko Buku Sampel Siap Produksi API Restful API dengan GO menggunakan gorilla/mux uber/zap lumback dengan mysql (database relasional yang bagus), otentikasi jwt. Proyek ini berisi implementasi Golang dari Swagger 2.0 (alias OpenAPI 2.0): Ia tahu cara membuat serialisasi dan deserialisasi spesifikasi Swagger.
# Download this project
git clone github.com/err-him/go-book-store-apiSebelum menjalankan API Server, Anda harus mengatur konfigurasi database dengan milik Anda atau mengatur konfigurasi database Anda dengan nilai saya di db/evv.local.json
{
"host" : "127.0.0.1",
"port" : "3306",
"uname" : "root",
"dbname" : "book_store",
"pass" : "root"
}
Langkah 1: Buat gambar Docker menurut DockerFile. Pastikan komposisi Docker dipasang pada sistem build Anda. Untuk detail tentang cara melakukan ini, lihat: https://docs.docker.com/compose/install/
# This may take a few minutes.
$ docker-compose up -dIni akan membuat dua wadah di latar belakang untuk go dan mySQL masing -masing
Langkah 2 : . Proses di atas akan membuat dua wadah terpisah dan DB untuk aplikasi, untuk secara otomatis mengisi beberapa data dalam DB Run
$ cat db.sql | docker exec -i full_db_mysql /usr/bin/mysql -u root --password=root book_store
Langkah 3: Buka terminal lain dan akses contoh titik akhir API.
$ curl http://localhost:9002/health
{ " status " : " up " } CATATAN PENTING: Saat menyiapkan Docker, ubah host DB dari 127.0.0.1 ke book-store-mysql karena saat membuat gambar Docker kami membuktikan nama host book-store-mysql lain menggunakan 127.0.0.1 jika berjalan menggunakan go run atau buat run
Gorilla/Mux digunakan untuk menyiapkan routing. Ini menyediakan beberapa fitur yang kuat seperti pengelompokan/middleware/handler dll.
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 sedang digunakan sebagai database database/sql dan github.com/go-sql-driver/mysql modul untuk membuat dan mengelola koneksi basis data
# 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
Spesifikasi OpenAPI (sebelumnya Spesifikasi Swagger) adalah format deskripsi API untuk API REST. File OpenAPI memungkinkan Anda untuk menggambarkan seluruh API Anda, termasuk:
/users ) dan operasi di setiap titik akhir ( GET /users , POST /users )Spesifikasi API dapat ditulis dalam YAML atau JSON. Formatnya mudah dipelajari dan dapat dibaca oleh manusia dan mesin. Spesifikasi OpenAPI lengkap dapat ditemukan di GitHub: Spesifikasi OpenAPI 2.0, Spesifikasi OpenAPI 3.0
Swagger adalah satu set alat open-source yang dibangun di sekitar spesifikasi OpenAPI yang dapat membantu Anda merancang, membangun, mendokumentasikan, dan mengkonsumsi API REST. Alat kesombongan utama meliputi: Swagger memungkinkan Anda untuk menggambarkan struktur API Anda sehingga mesin dapat membacanya. Kemampuan API untuk menggambarkan struktur mereka sendiri adalah akar dari semua kehebatan dalam kesombongan.
Kesombongan dapat ditulis dalam JSON atau YAML. Dalam panduan ini, kami hanya menggunakan contoh YAML, tetapi JSON bekerja dengan baik. Sampel spesifikasi kesombongan yang ditulis dalam YAML terlihat seperti:
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 Proyek ini berisi implementasi Golang dari Swagger 2.0 (alias OpenAPI 2.0): Ia tahu cara membuat serialisasi dan deserialisasi spesifikasi Swagger.
go-swagger Membawa Komunitas GO Rangkaian lengkap komponen API yang berfitur lengkap dan berkinerja tinggi untuk bekerja dengan API Swagger
Instalasi pergi ke Swagger untuk menginstal go swagger di mac, ketik perintah berikut
brew tap go-swagger/go-swagger
brew install go-swagger
Setelah instalasi selesai, buka repo proyek dan hasilkan dokumentasi kesombongan dengan mengikuti perintah
swagger serve -F=swagger ./swagger.yml
Juga membuat makefile yang bagus untuk hal yang sama, untuk dijalankan melalui Make Enter: make serve-swagger
** Swagger UI ** 






Proyek ini berisi implementasi Golang dari Swagger 2.0 (alias OpenAPI 2.0): Ia tahu cara membuat serialisasi dan deserialisasi spesifikasi Swagger.
go-swagger Membawa Komunitas GO Rangkaian lengkap komponen API yang berfitur lengkap dan berkinerja tinggi untuk bekerja dengan API Swagger
Instalasi pergi ke Swagger untuk menginstal go swagger di mac, ketik perintah berikut
brew tap go-swagger/go-swagger
brew install go-swagger
Setelah instalasi selesai, buka repo proyek dan hasilkan dokumentasi kesombongan dengan mengikuti perintah
swagger serve -F=swagger ./swagger.yml
Juga membuat makefile yang bagus untuk hal yang sama, untuk dijalankan melalui Make Enter: make serve-swagger
** Swagger UI ** 






POST : Buat genrePUT : Perbarui GenreGET : Dapatkan semua genre aktifGET : Dapatkan satu genre - ditentukan oleh ID atau Slug GenreDELETE : hapus genre - hapus lunak dengan id atau slug tertentu POST : Buat PenerbitPUT : Perbarui PenerbitGET : Dapatkan semua penerbit aktifGET : Dapatkan satu Penerbit - Ditentukan oleh ID atau Slug GenreDELETE : hapus penerbit - soft delete dengan id atau slug yang ditentukan POST : Buat PenulisPUT : Pembaruan PenulisGET : Dapatkan semua penulis aktifGET : Dapatkan satu penulis - ditentukan oleh ID atau Slug GenreDELETE : hapus penulis - soft delete dengan id atau slug tertentu POST : Buat bukuPUT : Pembaruan BukuGET : dapatkan semua bukuGET : get one book - ditentukan oleh idDELETE : hapus buku - soft delete by id idGET : pencarian buku - dengan namanya POST : Buat PenggunaPUT : Verifikasi Buku Jangan ragu untuk membuka masalah jika Anda menemukan bug atau jika Anda ingin meminta fitur baru.
git checkout -b new-feature )git commit -am 'Some cool changes' )git push origin new-feature )