بسته http Golang استفاده از API های REST را برای انتقال داده و برنامه های مشتری آسان می کند.
API های RESTful معماری های محبوبی برای انتقال داده در سراسر وب هستند. API های RESTful معمولاً از HTTP استفاده می کنند، و آنها را برای مواردی که بی تابعیتی مهم است مناسب می کند.
مانند هر زبان سمت سرور، می توانید با پروتکل HTTP تعامل داشته باشید و درخواست های HTTP را در Go انجام دهید.
شروع به مصرف API های RESTful در Go
بسته http بیشتر قابلیتهایی را که برای تعامل با پروتکل HTTP در Go نیاز دارید، فراهم میکند. این شامل درخواستهای HTTP میشود و شما لزوماً به وابستگیهای خارجی مانند جین یا پایگاه داده نیاز ندارید.
می توانید از بسته http برای مصرف API ها و واکشی صفحات برای خراش وب در Go استفاده کنید.
برای شروع درخواست های HTTP در Go، این بسته ها را وارد کنید.
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
شما از بسته بایت برای دستکاری برش های بایت، بسته json برای قالب بندی داده های درخواست، بسته fmt برای نوشتن در خروجی استاندارد، بسته ioutil برای ورودی و خروجی، و بسته http برای ارسال درخواست ها استفاده خواهید کرد.
یک درخواست ساده GET in Go
درخواستهای GET معمولی دادهها را از یک سرور میخوانند و ممکن است بسته به ماهیت و مشخصات API، پارامترهایی را برای دادهها ارائه کنند.
در این آموزش، نحوه استفاده از API های RESTful را با استفاده از سرویس ساده درخواست و پاسخ httpbin خواهید آموخت.
در اینجا نمونه ای از درخواست HTTP با Go آمده است:
url := "https://httpbin.org/get"
response, err := http.Get(url)
if err != nil {
fmt.Printf("There was an error from the API request %s", err.Error())
} else {
// continues [1] ...
}
متغیر url نقطه پایانی است که درخواست را به آن ارسال می کنید. متد Get URL را دریافت می کند، درخواست Get را اجرا می کند و پاسخ را شامل سرصفحه ها و بدنه آن برمی گرداند.
بسته به نیاز خود می توانید هر گونه خطای درخواست را مدیریت کنید. اگر خطایی وجود نداشت، می توانید اطلاعات مورد نیاز خود را از درخواست Get استخراج کنید.
} else {
// ... [1] continued
responseData, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Printf("There was an error from parsing the request body %s", err.Error())
} else {
// continues [2] ...
}
}
فیلد بدن پاسخ، بدنه پاسخ را نگه می دارد. با استفاده از روش ReadAll بسته ioutil، می توانید بدنه پاسخ را بخوانید و خطاهای احتمالی را مدیریت کنید.
} else {
// ... [2] continued
fmt.Println(string(responseData))
}
اگر خطایی در عملیات خواندن وجود نداشته باشد، دستور else بدنه پاسخ را در کنسول شما چاپ می کند.
در اینجا نتیجه درخواست GET به نقطه پایانی httpbin است.
یک درخواست پست ساده در Go
درخواستهای معمولی POST محمولههای داده را به سرور ارائه میدهند و سرور بسته به عملیات، پاسخی را برمیگرداند.
در اینجا یک ساختار ساده برای رمزگذاری یک بار JSON به سرور به عنوان بخشی از درخواست POST وجود دارد.
type JSON struct {
info string
message string
}
ساختار JSON دارای فیلدهای رشته اطلاعات و پیام است و شما یک نمونه ساختار را برای درخواست مقداردهی اولیه می کنید.
url := "https://httpbin.org/post"
jsonInstance := JSON {
info: "expecting success",
message: "the request should return ",
}
متغیر url نقطه پایانی درخواست POST را از وب سایت httpbin ذخیره می کند. متغیر jsonInstance نمونه ای از ساختار JSON است که می توانید از آن برای ذخیره و ارسال داده های ساخت یافته استفاده کنید.
می توانید از متد Marshal از بسته json برای فرمت JSON برای درخواست استفاده کنید.
jsonData, err := json.Marshal(jsonInstance)
if err != nil {
fmt.Println("there was an error with the JSON", err.Error())
} else {
// continues [1] ...
}
متد مارشال نیز خطایی را برمیگرداند که میتوانید با آن مقابله کنید. اگر در عملیات JSON marshaling خطایی وجود نداشت، میتوانید درخواست POST را انجام دهید.
برای ارسال درخواست های POST می توانید از روش Post استفاده کنید. روش ارسال، نقطه پایانی URL، نوع محتوای درخواست و یک بافر از بارگذاری را در بر می گیرد. پاسخ و خطا را برمی گرداند.
} else {
// ... continued [1]
response, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData))
if err != nil {
fmt.Println("there was an error with the request", err.Error())
} else {
// continues [2] ...
}
}
باز هم می توانید بدنه پاسخ را با استفاده از روش ReadAll بسته ioutil بخوانید:
} else {
// ... continued [2]
data, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println("there was an error reading the request body", err.Error())
} else {
fmt.Println(string(data))
}
}
دستور Println نتیجه درخواست HTTP را به کنسول شما ارسال می کند.
همانطور که مستندات httpbin مشخص می کند، این نقطه پایانی POST داده های درخواستی را که شما ارسال می کنید، برمی گرداند.
ساختن برنامه های وب در Go آسان است
شما می توانید برنامه های کاربردی وب را با عملکردهای مختلف در Go بدون وابستگی بسازید.
بسته http دارای توابعی است که برای اکثر عملیات خود به آن نیاز دارید. میتوانید از این بسته با بستههای دیگری مانند بسته json برای عملیات JSON، بسته متنی برای سیگنالدهی و بسته الگو برای الگوسازی استفاده کنید. بسیاری از بسته های دیگر در کتابخانه استاندارد وجود دارد.