إطار عمل جديد لـ Go يكتسب زخماً: ما يحتاج المطور معرفته

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

إطار عمل جديد لـ Go (Golang) يكتسب شعبية: نظرة عامة وآفاق



تواصل منظومة Go (Golang) تطورها النشط، وفي عام 2024، لاحظ المجتمع إطار عمل جديدًا يعد بتغيير طريقة إنشاء تطبيقات الويب. على الرغم من أن Go تشتهر تقليديًا ببساطتها ومكتبتها القياسية المدمجة، إلا أن الحاجة إلى حلول أكثر تنظيماً للخدمات المصغرة و REST API أدت إلى ظهور عدد من أطر العمل. آخرها — Huma — يكتسب نجومًا بسرعة على GitHub ويجذب انتباه كل من المبتدئين والمطورين ذوي الخبرة.



ما هو Huma وما الذي يميزه؟



Huma هو إطار عمل HTTP حديث لـ Go، يركز على إنشاء API مع توليد تلقائي لمواصفات OpenAPI (Swagger). على عكس الحلول التقليدية مثل Gin أو Echo، يركز Huma على الكتابة الصارمة (strict typing) والوصف التصريحي لنقاط النهاية (endpoints).



الميزات الرئيسية لإطار العمل:



  • توثيق تلقائي — يكفي وصف هياكل البيانات، وسيقوم Huma تلقائيًا بتوليد مواصفات OpenAPI 3.1 كاملة.
  • التحقق من الصحة على مستوى الأنواع — يتم التحقق من جميع البيانات الواردة والصادرة في مرحلتي التجميع والتنفيذ.
  • دعم middleware — يتكامل بسهولة مع المكتبات الحالية لتسجيل الدخول والمصادقة و CORS.
  • خفيف الوزن — لا يفرض إطار العمل تبعيات ثقيلة ويعمل بشكل أساسي مع net/http القياسي.


لماذا هذا مهم لمجتمع Go؟



غالبًا ما يتم اختيار Go (Golang) للأنظمة عالية التحميل وهندسة الخدمات المصغرة. ومع ذلك، حتى وقت قريب، كان المطورون مضطرين لكتابة التوثيق يدويًا أو استخدام مولدات ضخمة. يحل Huma هذه المشكلة: يصبح الكود موثقًا ذاتيًا، وهو أمر قيم بشكل خاص في العمل الجماعي وعند دعم المشاريع القديمة (legacy).



علاوة على ذلك، يستخدم إطار العمل بنشاط إمكانيات الأدوية (generics) التي تمت إضافتها في Go 1.18. وهذا يسمح بكتابة مكونات أكثر مرونة وقابلة لإعادة الاستخدام دون فقدان الأداء.



مثال على الاستخدام الأساسي



لإنشاء نقطة نهاية بسيطة على Huma، يكفي بضعة أسطر من الكود:



package main

import ( "github.com/danielgtaylor/huma/v2" "github.com/danielgtaylor/huma/v2/adapters/humachi")

type GreetingInput struct { Name string `path:"name" maxLength:"50"`}

type GreetingOutput struct { Message string `json:"message"`}

func main() { app := humachi.NewRouter() huma.Get(app, "/greeting/{name}", func(ctx huma.Context, input *GreetingInput) (*GreetingOutput, error) { return &GreetingOutput{Message: "مرحباً، " + input.Name + "!"}, nil }) app.Run()}


كما يتضح من المثال، لا يحتاج المطور إلى كتابة كود منفصل للتحقق من الصحة أو توليد التوثيق — كل شيء يحدث تلقائيًا بناءً على الهياكل المشروحة (annotated structures).



الآفاق والانتقادات



في الوقت الحالي، Huma في مرحلة التطوير النشط، لكنه حصل بالفعل على دعم من المشاريع التجارية الكبيرة. يلاحظ المجتمع أن إطار العمل يمكن أن يصبح المعيار الفعلي (de-facto) لإنشاء API في Go، إذا واصل فريقه تحسين التوثيق والاستقرار.



ومع ذلك، هناك أيضًا ملاحظات نقدية: يعتقد بعض المطورين أن Huma يعقد المهام البسيطة بشكل مفرط، وأن سحره في التوليد التلقائي قد يؤدي إلى أخطاء غير متوقعة في السيناريوهات المعقدة.



ز

المكتبات الموصى بها