Gin తో నా మొదటి నిజమైన Go APIని నిర్మించడం

నేను సిద్ధాంతం నుండి ఆచరణకు మారుతున్నాను.

structs, interfaces, goroutines మరియు error handling గురించి అధ్యయనం చేసిన తర్వాత, నేను Go మరియు Gin framework ఉపయోగించి ఒక పనిచేసే Orders APIని నిర్మించాను.

ఈ API మూడు పనులను చేస్తుంది:

  • ఒక ఆర్డర్‌ను సృష్టించడం (Create an order)
  • ID ద్వారా ఆర్డర్‌ను పొందడం (Fetch an order by ID)
  • అన్ని ఆర్డర్‌లను జాబితా చేయడం (List all orders)

routing మరియు middlewareని సులభతరం చేస్తుంది కాబట్టి నేను Ginని ఎంచుకున్నాను. ఇది c.JSON మరియు c.AbortWithStatusJSON వంటి helper functionsని అందిస్తుంది. ఈ సాధనాలు పునరావృతమయ్యే కోడ్‌ను (repetitive code) తగ్గిస్తాయి.

Project Structure: విషయాలను స్పష్టంగా ఉంచడానికి నేను flat package layoutని ఉపయోగించాను:

  • handler: HTTP లాజిక్‌ను నిర్వహిస్తుంది.
  • model: డేటా ఆకృతులను (data shapes) నిర్వచిస్తుంది.
  • store: డేటా స్టోరేజీని నిర్వహిస్తుంది.
  • middleware: logging మరియు requestsని నిర్వహిస్తుంది.

Key Technical Choices:

• Data Validation JSON serialization కోసం నేను struct tagsని ఉపయోగించాను. నేను Gin binding tagsని కూడా ఉపయోగించాను. దీనివల్ల అవసరమైన ఫీల్డ్‌లు ఉన్నాయని మరియు మొత్తాలు (amounts) సున్నా కంటే ఎక్కువగా ఉన్నాయని నిర్ధారించవచ్చు.

• Persistence and Concurrency ప్రస్తుత వెర్షన్ in-memory storeని ఉపయోగిస్తుంది. కన్కరెంట్ యాక్సెస్‌ను నిర్వహించడానికి నేను sync.RWMutexని ఉపయోగించాను. ఇది బహుళ రీడ్స్‌ని (multiple reads) అనుమతిస్తుంది కానీ రైట్స్‌ని (writes) సురక్షితంగా ఉంచుతుంది.

• Interfaces handler అనేది OrderStore interfaceపై ఆధారపడి ఉంటుంది. డేటా మెమరీలో ఉందా లేదా డేటాబేస్‌లో ఉందా అనే దానితో దానికి సంబంధం లేదు. దీనివల్ల స్టోరేజ్ లేయర్‌ను మార్చడం సులభం అవుతుంది.

• Error Handling ErrNotFound వంటి నిర్దిష్ట ఎర్రర్‌లను తనిఖీ చేయడానికి నేను errors.Isని ఉపయోగించాను. ఇది వినియోగదారునికి సరైన 404 status codeని తిరిగి పంపడానికి APIని అనుమతిస్తుంది.

• Middleware నేను ఒక కస్టమ్ లాగర్‌ను నిర్మించాను. ఇది method, path, status code మరియు request durationని ట్రాక్ చేస్తుంది.

ఈ సెటప్ మునుపటి భాగాలలో నేర్చుకున్నవన్నీ కలిపి చూపుతుంది. ఇది ఒక ఫంక్షనల్, స్ట్రక్చర్డ్ మరియు స్కేలబుల్ పునాది.

మీరు మీ Go ప్రాజెక్ట్‌లను ఎలా నిర్మిస్తారు? మీరు flat packagesని ఇష్టపడతారా లేదా లోతైన, domain-driven nestingని ఇష్టపడతారా?

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