GO SAMPLE PROJECT لفهم عملية mysql crud مع أفضل الممارسات
A Gorilla/Mux Uber/zap ready sample store regly store مع GO باستخدام Gorilla/Mux Uber/Zap Lumberjack مع MySQL (قاعدة بيانات علائقية لطيفة) ، مصادقة JWT. يحتوي هذا المشروع على تطبيق Golang لـ Swagger 2.0 (ويعرف أيضًا باسم 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: إنشاء صورة Docker وفقًا لـ Dockerfile. تأكد من تثبيت Docker-Corms على نظام الإنشاء الخاص بك. للحصول على تفاصيل حول كيفية القيام بذلك ، راجع: 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 " } book-store-mysql مهمة: 127.0.0.1 إعداد Docker book-store-mysql قم بتغيير مضيف DB من 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
# 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 APIs. يتيح لك ملف OpenAPI وصف API بالكامل ، بما في ذلك:
/users ) والعمليات في كل نقطة نهاية ( GET /users ، POST /users )يمكن كتابة مواصفات API في Yaml أو JSON. التنسيق سهل التعلم وقابل للقراءة لكل من البشر والآلات. يمكن العثور على مواصفات OpenAPI الكاملة على GitHub: OpenAPI 2.0 مواصفات ، مواصفات OpenAPI 3.0
Swagger عبارة عن مجموعة من الأدوات المفتوحة المصدر المبنية حول مواصفات OpenAPI التي يمكن أن تساعدك على تصميم وتوثيق وتوثيق واجهات برمجة تطبيقات REST. تتضمن أدوات Swagger الرئيسية: يتيح لك Swagger وصف بنية واجهات برمجة التطبيقات الخاصة بك حتى تتمكن الآلات من قراءتها. قدرة واجهات برمجة التطبيقات على وصف هيكلهم هي جذر كل الذهول في Swagger.
يمكن كتابة Swagger في JSON أو YAML. في هذا الدليل ، نستخدم أمثلة YAML فقط ، لكن JSON يعمل بشكل جيد على قدم المساواة. تبدو مواصفات Swagger عينة مكتوبة في 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 (ويعرف أيضًا باسم Openapi 2.0): إنه يعرف كيفية تسلسل مواصفات Swagger وتجاهلها.
يجلب go-swagger إلى مجتمع Go مجموعة كاملة من مكونات API ذات الأداء العالي المكتسب بالكامل للعمل مع واجهة برمجة تطبيقات Swagger
التثبيت Go Swagger لتثبيت Go Swagger في Mac ، اكتب الأمر التالي
brew tap go-swagger/go-swagger
brew install go-swagger
بمجرد الانتهاء من التثبيت ، انتقل إلى Project Repo وإنشاء وثائق Swagger باتباع الأمر
swagger serve -F=swagger ./swagger.yml
تم إنشاء Makefile لطيف أيضًا ، لتشغيله عبر Make Enter: make serve-swagger
** swagger ui ** 






يحتوي هذا المشروع على تطبيق Golang لـ Swagger 2.0 (ويعرف أيضًا باسم Openapi 2.0): إنه يعرف كيفية تسلسل مواصفات Swagger وتجاهلها.
يجلب go-swagger إلى مجتمع Go مجموعة كاملة من مكونات API ذات الأداء العالي المكتسب بالكامل للعمل مع واجهة برمجة تطبيقات Swagger
التثبيت Go Swagger لتثبيت Go Swagger في Mac ، اكتب الأمر التالي
brew tap go-swagger/go-swagger
brew install go-swagger
بمجرد الانتهاء من التثبيت ، انتقل إلى Project Repo وإنشاء وثائق Swagger باتباع الأمر
swagger serve -F=swagger ./swagger.yml
تم إنشاء Makefile لطيف أيضًا ، لتشغيله عبر Make Enter: make serve-swagger
** swagger ui ** 






POST : إنشاء هذا النوعPUT : تحديث النوعGET جميع: احصل على كل النوع النشطGET : احصل على نوع واحد - محدد بواسطة ID أو النوعDELETE : حذف النوع - حذف ناعم بواسطة معرف محدد أو سبيكة POST : إنشاء ناشرPUT : ناشر تحديثGET : احصل على كل الناشر النشطGET : الحصول على ناشر واحد - محدد بواسطة ID أو النوع SlugDELETE : حذف الناشر - حذف ناعم بواسطة معرف محدد أو سبيكة POST : إنشاء مؤلفPUT : تحديث المؤلفGET جميع: احصل على كل المؤلف النشطGET : احصل على مؤلف واحد - محدد بواسطة ID أو النوع SlugDELETE : حذف المؤلف - حذف ناعم بواسطة معرف محدد أو سبيكة POST : إنشاء كتابPUT : كتاب التحديثGET جميع: احصل على جميع الكتبGET : احصل على كتاب واحد - محدد بواسطة IDDELETE : حذف كتاب - حذف ناعم بواسطة معرفGET ؟ POST : إنشاء مستخدمPUT : تحقق من الكتاب لا تتردد في فتح مشكلة إذا واجهت أي أخطاء أو إذا كنت ترغب في طلب ميزة جديدة.
git checkout -b new-feature )git commit -am 'Some cool changes' )git push origin new-feature )