RESTful API Development এবং JSON Handling

Web Development with Go (ওয়েব ডেভেলপমেন্ট) - গো প্রোগ্রামিং (Go Programming) - Computer Programming

313

Go-তে RESTful API Development এবং JSON Handling

Go (Golang) একটি শক্তিশালী এবং দ্রুত ভাষা, যা RESTful API এবং JSON ডেটা হ্যান্ডলিংয়ে ব্যবহৃত হয়। Go-তে RESTful API তৈরি করার জন্য সাধারণত net/http প্যাকেজ ব্যবহার করা হয় এবং JSON ডেটা হ্যান্ডলিং করার জন্য encoding/json প্যাকেজ ব্যবহৃত হয়। এই টিউটোরিয়ালে আমরা দেখব কিভাবে Go তে RESTful API তৈরি করা যায় এবং JSON ডেটা প্রক্রিয়াজাত করা যায়।


১. Go-তে RESTful API তৈরি করা

RESTful API হল একটি ওয়েব সার্ভিস আর্কিটেকচার যা HTTP প্রটোকল ব্যবহার করে এবং এটি বিভিন্ন রিসোর্স (ডেটা) এর সাথে কাজ করে। RESTful API তৈরি করার জন্য Go-তে সাধারণত net/http প্যাকেজ ব্যবহৃত হয়।

১.১ Simple RESTful API তৈরি করা

এখানে একটি খুব সহজ RESTful API তৈরি করা হয়েছে, যা HTTP GET, POST, PUT, এবং DELETE রিকোয়েস্ট প্রসেস করবে।

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
    "strconv"
)

var data = map[int]string{
    1: "Go Programming",
    2: "RESTful API",
    3: "JSON Handling",
}

// GET Request handler
func getData(w http.ResponseWriter, r *http.Request) {
    // রিকোয়েস্ট থেকে ID বের করা
    id := r.URL.Query().Get("id")
    intID, err := strconv.Atoi(id)
    if err != nil || data[intID] == "" {
        http.Error(w, "Data not found", http.StatusNotFound)
        return
    }

    // JSON ফরম্যাটে রেসপন্স দেওয়া
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(map[string]string{
        "id":   id,
        "data": data[intID],
    })
}

// POST Request handler
func postData(w http.ResponseWriter, r *http.Request) {
    var newData map[string]string
    decoder := json.NewDecoder(r.Body)
    err := decoder.Decode(&newData)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // নতুন ডেটা প্রসেস করা
    id := len(data) + 1
    data[id] = newData["data"]

    w.WriteHeader(http.StatusCreated)
    json.NewEncoder(w).Encode(map[string]interface{}{
        "message": "Data created successfully",
        "id":      id,
    })
}

// PUT Request handler
func putData(w http.ResponseWriter, r *http.Request) {
    var updateData map[string]string
    decoder := json.NewDecoder(r.Body)
    err := decoder.Decode(&updateData)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    id := r.URL.Query().Get("id")
    intID, err := strconv.Atoi(id)
    if err != nil || data[intID] == "" {
        http.Error(w, "Data not found", http.StatusNotFound)
        return
    }

    // ডেটা আপডেট করা
    data[intID] = updateData["data"]

    json.NewEncoder(w).Encode(map[string]string{
        "message": "Data updated successfully",
        "id":      id,
    })
}

// DELETE Request handler
func deleteData(w http.ResponseWriter, r *http.Request) {
    id := r.URL.Query().Get("id")
    intID, err := strconv.Atoi(id)
    if err != nil || data[intID] == "" {
        http.Error(w, "Data not found", http.StatusNotFound)
        return
    }

    delete(data, intID)

    json.NewEncoder(w).Encode(map[string]string{
        "message": "Data deleted successfully",
        "id":      id,
    })
}

func main() {
    http.HandleFunc("/get", getData)     // GET রিকোয়েস্টের জন্য
    http.HandleFunc("/post", postData)   // POST রিকোয়েস্টের জন্য
    http.HandleFunc("/put", putData)     // PUT রিকোয়েস্টের জন্য
    http.HandleFunc("/delete", deleteData) // DELETE রিকোয়েস্টের জন্য

    fmt.Println("Starting server on :8080")
    log.Fatal(http.ListenAndServe(":8080", nil)) // সার্ভার চালু করা
}

এখানে:

  • getData: একটি GET রিকোয়েস্ট হ্যান্ডলার যা ডেটার আইডি দিয়ে JSON রেসপন্স পাঠায়।
  • postData: একটি POST রিকোয়েস্ট হ্যান্ডলার যা নতুন ডেটা গ্রহণ করে এবং সেটি ডেটাবেস (এখানে data মেমরি ভেরিয়েবল) এ সংরক্ষণ করে।
  • putData: একটি PUT রিকোয়েস্ট হ্যান্ডলার যা নির্দিষ্ট ডেটা আইডি আপডেট করে।
  • deleteData: একটি DELETE রিকোয়েস্ট হ্যান্ডলার যা নির্দিষ্ট ডেটা আইডি মুছে ফেলে।

আউটপুট:

  • GET Request: http://localhost:8080/get?id=1
    • আউটপুট: {"id":"1", "data": "Go Programming"}
  • POST Request: http://localhost:8080/post
    • আউটপুট: { "message": "Data created successfully", "id": 4 }
  • PUT Request: http://localhost:8080/put?id=1
    • আউটপুট: { "message": "Data updated successfully", "id": 1 }
  • DELETE Request: http://localhost:8080/delete?id=1
    • আউটপুট: { "message": "Data deleted successfully", "id": 1 }

৩. Go-তে JSON Handling

Go-তে JSON ডেটা হ্যান্ডলিং সাধারণত encoding/json প্যাকেজ দিয়ে করা হয়। আপনি JSON প্যাকেজ ব্যবহার করে সহজেই JSON ডেটা পড়তে এবং লেখতে পারেন।

৩.১ JSON Parse (JSON ডেটা পার্স করা)

যখন আপনি একটি JSON ডেটা গ্রহণ করেন, তখন আপনি সেটি একটি struct বা map এর মধ্যে রূপান্তর করতে পারেন। নিচে একটি উদাহরণ দেয়া হলো, যেখানে একটি JSON ডেটা কনভার্ট করা হচ্ছে Go struct এর মধ্যে।

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    // JSON ডেটা
    jsonData := `{"name": "Alice", "age": 30}`

    // JSON ডেটাকে struct এ রূপান্তর করা
    var p Person
    err := json.Unmarshal([]byte(jsonData), &p)
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println("Name:", p.Name) // আউটপুট: Name: Alice
    fmt.Println("Age:", p.Age)   // আউটপুট: Age: 30
}

এখানে, json.Unmarshal ফাংশন ব্যবহার করে JSON ডেটা Go struct এর মধ্যে রূপান্তর করা হয়েছে।

৩.২ JSON Generate (JSON ডেটা জেনারেট করা)

আপনি যদি Go struct থেকে JSON ডেটা তৈরি করতে চান, তবে json.Marshal ব্যবহার করতে পারেন।

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    p := Person{"Bob", 25}

    // Go struct থেকে JSON তৈরি করা
    jsonData, err := json.Marshal(p)
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(jsonData)) // আউটপুট: {"name":"Bob","age":25}
}

এখানে, json.Marshal ফাংশন ব্যবহার করে Go struct থেকে JSON তৈরি করা হয়েছে।

৩.৩ JSON Pretty Print

আপনি যদি JSON ডেটা প্রিন্ট করতে চান যাতে তা আরও পড়তে সুবিধাজনক হয়, তাহলে json.MarshalIndent ব্যবহার করতে পারেন।

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    p := Person{"John", 40}

    // JSON Pretty Print
    jsonData, err := json.MarshalIndent(p, "", "  ")
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(jsonData))
}

আউটপুট:

{
  "name": "John",
  "age": 40
}

সারসংক্ষেপ

  • Go-তে RESTful API তৈরি করতে net/http প্যাকেজ ব্যবহৃত হয়। এতে GET, POST, PUT, এবং DELETE রিকোয়েস্টের জন্য হ্যান্ডলার তৈরি করা যায়।
  • JSON Handling এর জন্য Go-তে **`

encoding/json`** প্যাকেজ ব্যবহৃত হয়, যার মাধ্যমে JSON ডেটা পড়া এবং লেখা সম্ভব হয়।

  • json.Unmarshal এবং json.Marshal ফাংশনগুলির মাধ্যমে JSON ডেটা পার্স এবং জেনারেট করা হয়।
  • Go-তে JSON Pretty Print এর জন্য json.MarshalIndent ব্যবহার করা হয়।

Go-তে RESTful API এবং JSON Handling খুবই সহজ এবং কার্যকরীভাবে করা যায়, যা ওয়েব সার্ভিস এবং ডেটা এক্সচেঞ্জ প্রক্রিয়াগুলিকে অনেক বেশি নমনীয় এবং দ্রুত করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...