Gin ব্যবহার করে Go-তে আমার প্রথম রিয়েল API তৈরি করা

আমি তাত্ত্বিক জ্ঞান থেকে ব্যবহারিক প্রয়োগের দিকে এগোচ্ছি।

structs, interfaces, goroutines এবং error handling সম্পর্কে পড়াশোনা করার পর, আমি Go এবং Gin framework ব্যবহার করে একটি কার্যকরী Orders API তৈরি করেছি।

API-টি তিনটি কাজ সম্পন্ন করে:

  • একটি অর্ডার তৈরি করা
  • ID দিয়ে একটি অর্ডার খুঁজে বের করা
  • সব অর্ডার তালিকাভুক্ত করা

আমি Gin বেছে নিয়েছি কারণ এটি routing এবং middleware সহজ করে তোলে। এটি c.JSON এবং c.AbortWithStatusJSON-এর মতো helper functions প্রদান করে। এই টুলগুলো পুনরাবৃত্তিমূলক কোড কমিয়ে দেয়।

প্রজেক্ট স্ট্রাকচার: সবকিছু পরিষ্কার রাখার জন্য আমি একটি flat package layout ব্যবহার করেছি:

  • handler: HTTP লজিক পরিচালনা করে।
  • model: ডেটার গঠন (data shapes) সংজ্ঞায়িত করে।
  • store: ডেটা স্টোরেজ পরিচালনা করে।
  • middleware: লগিং এবং রিকোয়েস্ট পরিচালনা করে।

মূল প্রযুক্তিগত সিদ্ধান্তসমূহ:

• ডেটা ভ্যালিডেশন (Data Validation) আমি JSON serialization-এর জন্য struct tags ব্যবহার করেছি। আমি Gin binding tags-ও ব্যবহার করেছি। এটি নিশ্চিত করে যে প্রয়োজনীয় ফিল্ডগুলো বিদ্যমান আছে এবং পরিমাণ (amount) শূন্যের চেয়ে বেশি।

• পারসিস্টেন্স এবং কনকারেন্সি (Persistence and Concurrency) বর্তমান ভার্সনটি একটি in-memory store ব্যবহার করে। কনকারেন্ট অ্যাক্সেস (concurrent access) পরিচালনা করতে আমি sync.RWMutex ব্যবহার করেছি। এটি একাধিকবার রিড (read) করার অনুমতি দেয় কিন্তু রাইট (write) অপারেশনগুলোকে নিরাপদ রাখে।

• ইন্টারফেস (Interfaces) handler-টি OrderStore interface-এর ওপর নির্ভরশীল। ডেটা মেমোরিতে আছে নাকি ডেটাবেসে, তা নিয়ে এটি চিন্তিত নয়। এটি স্টোরেজ লেয়ার পরিবর্তন করা সহজ করে তোলে।

• এরর হ্যান্ডলিং (Error Handling) ErrNotFound-এর মতো নির্দিষ্ট এরর চেক করার জন্য আমি errors.Is ব্যবহার করেছি। এটি API-কে ব্যবহারকারীর কাছে সঠিক 404 status code প্রদান করতে সাহায্য করে।

• মিডলওয়্যার (Middleware) আমি একটি কাস্টম লগার (custom logger) তৈরি করেছি। এটি method, path, status code এবং request duration ট্র্যাক করে।

এই সেটআপটি পূর্ববর্তী অংশগুলোতে শেখা সবকিছুকে একত্রিত করে। এটি একটি কার্যকরী, সুসংগঠিত এবং স্কেলেবল (scalable) ভিত্তি।

আপনি আপনার Go প্রজেক্টগুলো কীভাবে সাজান? আপনি কি flat packages পছন্দ করেন নাকি গভীর, domain-driven nesting পছন্দ করেন?

উৎস: https://dev.to/mihirmohapatra/building-my-first-real-api-in-go-with-gin-3kio