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 খুবই সহজ এবং কার্যকরীভাবে করা যায়, যা ওয়েব সার্ভিস এবং ডেটা এক্সচেঞ্জ প্রক্রিয়াগুলিকে অনেক বেশি নমনীয় এবং দ্রুত করে তোলে।
Read more