تعد Golang واحدة من لغات البرمجة الأعلى ربحًا والتي يوجد بها العديد من التطبيقات. عند الاقتران بأطر مثل Gin و Revel و gorilla / mux ، يمكنك بسهولة إنشاء واجهة برمجة تطبيقات باستخدام Go.

تعرف على كيفية إنشاء واجهة برمجة تطبيقات CRUD في Golang باستخدام إطار عمل Gin HTTP.

الإعداد الأولي والتثبيت

ابدأ مع Golang عن طريق تثبيته على جهاز الكمبيوتر الخاص بك إذا لم تكن قد قمت بذلك بالفعل.

بمجرد التثبيت ، فإن الخطوة التالية هي إنشاء مجلد جذر للمشروع على جهازك وتهيئة وحدة Go في هذا الدليل الجذر.

للقيام بذلك ، افتح CLI، انتقل إلى المجلد الجذر لمشروعك وقم بتشغيل:

اذهب mod init module_name

سترى اسم الوحدة الخاصة بك (على سبيل المثال CRUD_API) وإصداره عند فتح ملف go.mod ملف. ستأتي جميع الحزم المخصصة من هذه الوحدة الرئيسية. لذلك تأخذ أي حزمة مخصصة مستوردة الشكل:

يستورد(حزمة CRUD_API /حزمة-اسم الدليل)

بعد ذلك ، قم بتثبيت الحزم اللازمة لإنشاء واجهة برمجة تطبيقات CRUD. في هذه الحالة ، استخدم جين غونيك لتوجيه نقاط نهاية API:

يذهب احصل على github.com/gin-gonic/gin

الآن قم بتثبيت برنامج تشغيل MongoDB لتخزين البيانات:

يذهب احصل على go.mongodb.org/mongo-driver/mongo
instagram viewer

كيفية الاتصال اذهب إلى MongoDB

كل ما تحتاجه هو MongoDB URI الخاص بك لربط Golang بقاعدة البيانات. عادةً ما يبدو هكذا إذا كنت تتصل بـ MongoDB Atlas محليًا:

Mongo_URL = "mongodb: //127.0.0.1: 27017"

الآن قم بإنشاء مجلد جديد في الدليل الجذر لمشروعك وقم بتسميته قواعد بيانات. قم بإنشاء ملف Go داخل هذا المجلد وقم بتسميته قاعدة البيانات.

هذه هي حزمة قاعدة البيانات الخاصة بك ، وتبدأ باستيراد المكتبات المطلوبة:

حزمة قاعدة البيانات

يستورد (
"سياق الكلام"
"FMT"
"سجل"
"زمن"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)

func ConnectDB() * المونجو. عميل {
Mongo_URL: = "mongodb: //127.0.0.1: 27017"
العميل ، يخطئ: = mongo. NewClient (خيارات. العميل (). ApplyURI (Mongo_URL))

إذا أخطأت! = لا شيء {
سجل.مميت(يخطئ)
}

ctx ، إلغاء: = السياق. WithTimeout (سياق. الخلفية () ، 10 * الوقت. ثانيا)
يخطئ = العميل. ربط (ctx)
تأجيل إلغاء ()

إذا أخطأت! = لا شيء {
سجل.مميت(يخطئ)
}

FMT. Println ("متصل بـ mongoDB")
إرجاع عميل
}

من أفضل الممارسات إخفاء متغيرات البيئة مثل سلسلة اتصال قاعدة البيانات في ملف .env ملف باستخدام حزمة dotenv. هذا يجعل الكود الخاص بك أكثر قابلية للنقل ويكون مفيدًا عند استخدام ملف مثيل الكتلة السحابية MongoDB، فمثلا.

ال ConnectDB تقوم الوظيفة بإنشاء اتصال وإرجاع كائن عميل MongoDB جديد.

إنشاء مجموعة قاعدة بيانات

يقوم MongoDB بتخزين البيانات في مجموعات ، والتي توفر واجهة لبيانات قاعدة البيانات الأساسية.

للتعامل مع وظيفة جلب المجموعة ، ابدأ بإنشاء مجلد جديد ، مجموعة، في جذر مشروعك. الآن قم بإنشاء ملف Go جديد ، getCollection.go، الذي يحصل على المجموعة من قاعدة البيانات:

حزمة getcollection

يستورد (
"go.mongodb.org/mongo-driver/mongo"
)

funcGetCollection(عميل *المونغو.عميل, اسم المجموعةسلسلة) *المونغو.مجموعة {
المجموعة: = العميل. قاعدة البيانات("myGoappDB").مجموعة("المشاركات")
إرجاع مجموعة
}

تحصل هذه الوظيفة على المجموعة من قاعدة بيانات MongoDB. اسم قاعدة البيانات ، في هذه الحالة ، هو myGoappDB، مع المشاركات كمجموعتها.

قم بإنشاء نموذج قاعدة البيانات

قم بإنشاء مجلد جديد داخل الدليل الجذر الخاص بك وقم بتسميته نموذج. يعالج هذا المجلد نموذج قاعدة البيانات الخاصة بك.

قم بإنشاء ملف Go جديد داخل هذا المجلد وقم بتسميته model.go. نموذجك ، في هذه الحالة ، هو منشور مدونة بعنوانه:

حزمة نموذج

يستورد (
"go.mongodb.org/mongo-driver/bson/primitive"
)

يكتب هيكل المشاركة {
بطاقة تعريفبدائي.معرف الكائن
سلسلة العنوان
سلسلة المقالة
}

إنشاء واجهة برمجة تطبيقات CRUD مع Go

التالي هو إنشاء واجهة برمجة تطبيقات CRUD. للبدء بهذا القسم ، أنشئ مجلدًا جديدًا داخل الدليل الجذر لمشروعك للتعامل مع نقاط النهاية الخاصة بك. نسميها الطرق.

قم بإنشاء ملف Go منفصل في هذا المجلد لكل إجراء. على سبيل المثال ، يمكنك تسميتها create.go, read.go, update.go، و delete.go. ستقوم بتصدير هذه المعالجات باسم الطرق حزمة.

كيفية إنشاء نقطة نهاية POST في Go

ابدأ بتحديد نقطة نهاية POST لكتابة البيانات في قاعدة البيانات.

داخل المسارات / create.go، يضاف ما يلي:

حزمة الطرق

يستورد (
getcollection "CRUD_API / المجموعة"
قاعدة البيانات "CRUD_API / قواعد البيانات"
نموذج "CRUD_API / نموذج"
"سياق الكلام"
"سجل"
"صافي / http"
"زمن"
"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson/primitive"
)

func CreatePost(ج * الجن. سياق){
فار DB = قاعدة البيانات. ConnectDB ()
var postCollection = getcollection. GetCollection (DB ، "المشاركات")
ctx ، إلغاء: = السياق. WithTimeout (سياق. الخلفية () ، 10 * الوقت. ثانيا)
آخر: = الجديد(نموذج. المشاركات)
تأجيل إلغاء ()

إذا أخطأ: = ج. بيندجسون (&بريد)؛ يخطئ! = لا شيء {
ج. JSON (http. StatusBadRequest ، الجن. ح {"رسالة": err})
سجل.مميت(يخطئ)
إرجاع
}

postPayload: = نموذج. المشاركات{
هوية شخصية: بدائي.NewObjectID(),
عنوان: بريد.عنوان,
مقالة - سلعة: بريد.مقالة - سلعة,
}

النتيجة ، يخطئ: = postCollection. InsertOne (ctx ، postPayload)

إذا أخطأت! = لا شيء {
ج. JSON (http. StatusInternalServerError، gin. ح {"رسالة": err})
إرجاع
}

ج. JSON (http. الحالة: خلقت ، الجن. ح {"رسالة": "تم النشر بنجاح", "بيانات": واجهة الخريطة [السلسلة] {} {"بيانات": نتيجة}})
}

يبدأ هذا الرمز باستيراد الوحدات النمطية المخصصة للمشروع. ثم تقوم باستيراد حزم الجهات الخارجية بما في ذلك شرك و سائق MongoDB.

إضافي، postCollection يحمل مجموعة قاعدة البيانات. على وجه الخصوص ، ج. BindJSON ("المشاركة") هو مثيل نموذج JSONified الذي يستدعي كل حقل نموذج باسم postPayload; هذا يذهب إلى قاعدة البيانات.

كيفية إنشاء GET Endpoint

نقطة نهاية GET ، بتنسيق المسارات / read.go، يقرأ مستندًا واحدًا من قاعدة البيانات عبر معرفها الفريد. يبدأ أيضًا باستيراد الحزم المخصصة وحزم الجهات الخارجية:

حزمة الطرق

يستورد (
getcollection "CRUD_API / المجموعة"
قاعدة البيانات "CRUD_API / قواعد البيانات"
نموذج "CRUD_API / نموذج"
"سياق الكلام"
"صافي / http"
"زمن"
"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)

func قراءة(ج * الجن. سياق){
ctx ، إلغاء: = السياق. WithTimeout (سياق. الخلفية () ، 10 * الوقت. ثانيا)
فار DB = قاعدة البيانات. ConnectDB ()
var postCollection = getcollection. GetCollection (DB ، "المشاركات")

معرف البريد: = ج. بارام ("بعد معرف")
فار نموذج النتيجة. المشاركات

تأجيل إلغاء ()

objId ، _: = بدائي. ObjectIDFromHex (postId)

يخطئ: = postCollection. FindOne (ctx ، bson. م {"هوية شخصية": objId}). فك (&نتيجة)

الدقة: = خريطة [سلسلة]واجهه المستخدم{} {"البيانات": النتيجة}

إذا أخطأت! = لا شيء {
ج. JSON (http. StatusInternalServerError، gin. ح {"رسالة": err})
إرجاع
}

ج. JSON (http. الحالة: خلقت ، الجن. ح {"رسالة": "النجاح!", "بيانات": res})
}

ال بعد معرف المتغير هو إعلان المعلمة. يحصل على معرف كائن المستند كـ الهدف.

لكن، نتيجة هو مثيل لنموذج قاعدة البيانات ، والذي يحمل لاحقًا المستند المرتجع كـ الدقة.

كيفية إنشاء نقطة نهاية PUT

معالج PUT ، بتنسيق المسارات / update.go، مشابه لمعالج POST. هذه المرة ، تقوم بتحديث منشور موجود من خلال معرف الكائن الفريد الخاص به:

حزمة الطرق

يستورد (
getcollection "CRUD_API / المجموعة"
قاعدة البيانات "CRUD_API / قواعد البيانات"
نموذج "CRUD_API / نموذج"
"سياق الكلام"
"صافي / http"
"زمن"
"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)

func تحديث(ج * الجن. سياق){
ctx ، إلغاء: = السياق. WithTimeout (سياق. الخلفية () ، 10 * الوقت. ثانيا)
فار DB = قاعدة البيانات. ConnectDB ()
var postCollection = getcollection. GetCollection (DB ، "المشاركات")

معرف البريد: = ج. بارام ("بعد معرف")
فار نموذج آخر. المشاركات

تأجيل إلغاء ()

objId ، _: = بدائي. ObjectIDFromHex (postId)

إذا أخطأ: = ج. بيندجسون (&بريد)؛ يخطئ! = لا شيء {
ج. JSON (http. StatusInternalServerError، gin. ح {"رسالة": err})
إرجاع
}

معدل: = bson. م {"لقب": بريد. عنوان، "مقالة - سلعة": بريد. مقالة - سلعة}

النتيجة ، يخطئ: = postCollection. UpdateOne (ctx ، bson. م {"هوية شخصية": objId} ، bson. م {"مجموعة $": محرر})

الدقة: = خريطة [سلسلة]واجهه المستخدم{} {"البيانات": النتيجة}

إذا أخطأت! = لا شيء {
ج. JSON (http. StatusInternalServerError، gin. ح {"رسالة": err})
إرجاع
}

إذا كانت النتيجة. المتطابقات < 1 {
ج. JSON (http. StatusInternalServerError، gin. ح {"رسالة": "البيانات غير موجودة'ر موجود"})
إرجاع
}

ج. JSON (http. الحالة: خلقت ، الجن. ح {"رسالة": "تم تحديث البيانات بنجاح!", "بيانات": res})
}

تنسيق JSON لمثيل النموذج (بريد) يستدعي كل حقل نموذج من قاعدة البيانات. يستخدم المتغير الناتج MongoDB مجموعة $ المشغل لتحديث المستند المطلوب الذي تم استدعاؤه بواسطة معرف الكائن الخاص به.

ال نتيجة. المتطابقات الشرط يمنع تشغيل الكود إذا لم يكن هناك سجل في قاعدة البيانات أو إذا كان المعرف الذي تم تمريره غير صالح.

إنشاء نقطة نهاية الحذف

نقطة نهاية الحذف ، بتنسيق delete.go، يزيل مستندًا استنادًا إلى معرف الكائن الذي تم تمريره كمعامل URL:

حزمة الطرق

يستورد (
getcollection "CRUD_API / المجموعة"
قاعدة البيانات "CRUD_API / قواعد البيانات"
"سياق الكلام"
"صافي / http"
"زمن"
"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)

func حذف آخر(ج * الجن. سياق){
ctx ، إلغاء: = السياق. WithTimeout (سياق. الخلفية () ، 10 * الوقت. ثانيا)
فار DB = قاعدة البيانات. ConnectDB ()
معرف البريد: = ج. بارام ("بعد معرف")

var postCollection = getcollection. GetCollection (DB ، "المشاركات")
تأجيل إلغاء ()
objId ، _: = بدائي. ObjectIDFromHex (postId)
النتيجة ، يخطئ: = postCollection. DeleteOne (ctx، bson. م {"هوية شخصية": objId})
الدقة: = خريطة [سلسلة]واجهه المستخدم{} {"البيانات": النتيجة}

إذا أخطأت! = لا شيء {
ج. JSON (http. StatusInternalServerError، gin. ح {"رسالة": err})
إرجاع
}

إذا كانت النتيجة. DeletedCount < 1 {
ج. JSON (http. StatusInternalServerError، gin. ح {"رسالة": "لا توجد بيانات لحذفها"})
إرجاع
}

ج. JSON (http. الحالة: خلقت ، الجن. ح {"رسالة": "تم حذف المقال بنجاح", "بيانات": res})
}

هذا الرمز يحذف السجل باستخدام حذف واحد وظيفة. كما أنه يستخدم ملف نتيجة. DeletedCount الخاصية لمنع تشغيل التعليمات البرمجية إذا كانت قاعدة البيانات فارغة أو كان معرف الكائن غير صالح.

قم بإنشاء ملف API Runner

أخيرًا ، قم بإنشاء ملف main.go داخل الدليل الجذر لمشروعك. يجب أن يبدو هيكل مشروعك النهائي كما يلي:

يعالج هذا الملف تنفيذ الموجه لكل نقطة نهاية:

حزمة رئيسي

يستورد (
الطرق "CRUD_API / المسارات"
"github.com/gin-gonic/gin"
)

func رئيسي(){
جهاز التوجيه: = الجن.تقصير()

جهاز التوجيه. بريد("/"، الطرق. CreatePost)

// يسمى المضيف المحلي: 3000 / getOne / {id}
جهاز التوجيه. احصل على("getOne /: postId"، الطرق. قراءة OnePost)

// يسمى المضيف المحلي: 3000 /تحديث/{هوية شخصية}
جهاز التوجيه. وضع("/update/:postId"، الطرق. UpdatePost)

// يسمى المضيف المحلي: 3000 /حذف/{هوية شخصية}
جهاز التوجيه. حذف("/حذف/: postId "، المسارات. حذف آخر)

جهاز التوجيه. يجري("المضيف المحلي: 3000")
}

هذا الملف هو الحزمة الرئيسية التي تقوم بتشغيل الملفات الأخرى. يبدأ باستيراد معالجات التوجيه. التالي هو جهاز التوجيه متغير ، أ شرك المثال الذي يستدعي إجراءات HTTP ويستدعي كل نقطة نهاية باسم وظيفتها من الطرق حزمة.

يعمل مشروع CRUD الخاص بك المضيف المحلي: 3000. لتشغيل الخادم و اختبار واجهة برمجة تطبيقات CRUD، قم بتشغيل الأمر التالي في الدليل الأساسي الخاص بك:

يذهبيجريرئيسي.يذهب

حول مشروع Golang CRUD الخاص بك إلى منتج قابل للاستخدام

لقد نجحت في إنشاء واجهة برمجة تطبيقات CRUD مع Go ؛ تهانينا! في حين أن هذا مشروع صغير ، فقد رأيت ما يلزم لتنفيذ طلبات HTTP العادية في Go.

يمكنك أن تصبح أكثر إبداعًا من خلال توسيع هذا إلى تطبيق عملي أكثر يقدم قيمة للمستخدمين. Go هي لغة برمجة مناسبة لمجموعة من حالات الاستخدام.