Go Resty adalah sebuah library bahasa Go untuk membangun klien API RESTful. Dengan Go Resty, para pengembang dapat membangun klien API RESTful yang handal dengan lebih cepat dan efisien. Bab ini memperkenalkan cara untuk segera memulai dengan Go Resty.
Instalasi
require github.com/go-resty/resty/v2 v2.7.0
atau
go get github.com/go-resty/resty/v2
Contoh Resty
Contoh berikut akan membantu Anda menggunakan library resty sebaik mungkin.
// Impor resty ke dalam kode Anda dan gunakan sebagai `resty`.
import "github.com/go-resty/resty/v2"
Permintaan GET Sederhana
// Buat klien Resty
client := resty.New()
resp, err := client.R().
EnableTrace().
Get("https://httpbin.org/get")
// Jelajahi objek respons
fmt.Println("Info Respons:")
fmt.Println(" Kesalahan :", err)
fmt.Println(" Kode status:", resp.StatusCode())
fmt.Println(" Status :", resp.Status())
fmt.Println(" Protokol :", resp.Proto())
fmt.Println(" Waktu :", resp.Time())
fmt.Println(" Diterima pada:", resp.ReceivedAt())
fmt.Println(" Body :\n", resp)
fmt.Println()
// Jelajahi informasi pelacakan
fmt.Println("Info pelacakan permintaan:")
ti := resp.Request.TraceInfo()
fmt.Println(" DNS lookup :", ti.DNSLookup)
fmt.Println(" Waktu koneksi :", ti.ConnTime)
fmt.Println(" Waktu koneksi TCP:", ti.TCPConnTime)
fmt.Println(" TLS handshake :", ti.TLSHandshake)
fmt.Println(" Waktu server :", ti.ServerTime)
fmt.Println(" Waktu respons :", ti.ResponseTime)
fmt.Println(" Waktu total :", ti.TotalTime)
fmt.Println(" Apakah koneksi digunakan kembali :", ti.IsConnReused)
fmt.Println(" Koneksi sedang istirahat :", ti.IsConnWasIdle)
fmt.Println(" Waktu istirahat koneksi :", ti.ConnIdleTime)
fmt.Println(" Upaya permintaan :", ti.RequestAttempt)
fmt.Println(" Alamat remote :", ti.RemoteAddr.String())
Keluaran
Info Respons:
Kesalahan :
Kode status: 200
Status : 200 OK
Protokol : HTTP/2.0
Waktu : 457.034718ms
Diterima pada: 2020-09-14 15:35:29.784681 -0700 PDT m=+0.458137045
Body :
{
"args": {},
"headers": {
"Accept-Encoding": "gzip",
"Host": "httpbin.org",
"User-Agent": "go-resty/2.4.0 (https://github.com/go-resty/resty)",
"X-Amzn-Trace-Id": "Root=1-5f5ff031-000ff6292204aa6898e4de49"
},
"origin": "0.0.0.0",
"url": "https://httpbin.org/get"
}
Info pelacakan permintaan:
DNS lookup : 4.074657ms
Waktu koneksi : 381.709936ms
Waktu koneksi TCP: 77.428048ms
TLS handshake : 299.623597ms
Waktu server : 75.414703ms
Waktu respons : 79.337µs
Waktu total : 457.034718ms
Apakah koneksi digunakan kembali : false
Koneksi sedang istirahat : false
Waktu istirahat koneksi : 0s
Upaya permintaan : 1
Alamat remote : 3.221.81.55:443
Permintaan GET yang Kompleks
// Membuat klien Resty
klien := resty.New()
// Menetapkan parameter kueri
resp, err := klien.R().
SetQueryParams(map[string]string{
"page_no": "1",
"limit": "20",
"sort":"name",
"order": "asc",
"random":strconv.FormatInt(time.Now().Unix(), 10),
}).
SetHeader("Accept", "application/json").
SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F").
Get("/search_result")
// Contoh menggunakan metode Request.SetQueryString
resp, err := klien.R().
SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more").
SetHeader("Accept", "application/json").
SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F").
Get("/show_product")
// Jika diperlukan, memaksa tipe konten respons yang ditentukan untuk memberi instruksi kepada Resty agar mengurai respons JSON menjadi struktur Anda
resp, err := klien.R().
SetResult(result).
ForceContentType("application/json").
Get("v2/alpine/manifests/latest")
Berbagai Contoh Permintaan POST
// Membuat klien Resty
klien := resty.New()
// POST string JSON
// Jika pengaturan tingkat klien telah ditetapkan, jenis konten tidak perlu ditetapkan
resp, err := klien.R().
SetHeader("Content-Type", "application/json").
SetBody(`{"username":"testuser", "password":"testpass"}`).
SetResult(&AuthSuccess{}). // atau SetResult(AuthSuccess{}).
Post("https://myapp.com/login")
// POST array []byte
// Jika pengaturan tingkat klien telah ditetapkan, jenis konten tidak perlu ditetapkan
resp, err := klien.R().
SetHeader("Content-Type", "application/json").
SetBody([]byte(`{"username":"testuser", "password":"testpass"`)).
SetResult(&AuthSuccess{}). // atau SetResult(AuthSuccess{}).
Post("https://myapp.com/login")
// POST struktur, secara default menggunakan jenis konten JSON, tidak perlu ditetapkan
resp, err := klien.R().
SetBody(User{Username: "testuser", Password: "testpass"}).
SetResult(&AuthSuccess{}). // atau SetResult(AuthSuccess{}).
SetError(&AuthError{}). // atau SetError(AuthError{}).
Post("https://myapp.com/login")
// POST peta, secara default menggunakan jenis konten JSON, tidak perlu ditetapkan
resp, err := klien.R().
SetBody(map[string]interface{}{"username": "testuser", "password": "testpass"}).
SetResult(&AuthSuccess{}). // atau SetResult(AuthSuccess{}).
SetError(&AuthError{}). // atau SetError(AuthError{}).
Post("https://myapp.com/login")
// Mengunggah file sebagai array byte mentah. Contoh: Mengunggah file ke Dropbox
fileBytes, _ := os.ReadFile("/Users/jeeva/mydocument.pdf")
// Perhatikan bahwa kami tidak menetapkan header jenis konten karena go-resty akan secara otomatis mendeteksi Tipe Konten
resp, err := klien.R().
SetBody(fileBytes).
SetContentLength(true). // Dropbox membutuhkan nilai ini
SetAuthToken("").
SetError(&DropboxError{}). // atau SetError(DropboxError{}).
Post("https://content.dropboxapi.com/1/files_put/auto/resty/mydocument.pdf") // Dropbox juga mendukung unggahan metode PUT
// Catatan: Jika header jenis konten tidak ditetapkan, resty akan mendeteksi Tipe Konten dari badan permintaan
// * Untuk tipe data struct dan map, secara default adalah 'application/json'
// * Kemudian adalah jenis konten teks normal
Permintaan PUT
Anda dapat menggunakan berbagai kombinasi panggilan metode PUT
seperti yang ditunjukkan untuk POST
.
// Catatan: Ini adalah contoh penggunaan metode PUT, untuk lebih banyak kombinasi silakan lihat POST
// Buat klien Resty
klien := resty.New()
// Kirim permintaan dengan tipe konten JSON
// Jika terdapat pengaturan tingkat klien, token otentikasi dapat dihilangkan, error
resp, err := klien.R().
SetBody(Article{
Title: "go-resty",
Content: "Ini adalah konten artikel saya, oh yeah!",
Author: "Jeevanandam M",
Tags: []string{"artikel", "contoh", "resty"},
}).
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // Atau SetError(Error{}).
Put("https://myapp.com/article/1234")
Permintaan PATCH
Anda dapat menggunakan berbagai kombinasi panggilan metode PATCH
seperti yang ditunjukkan untuk POST
.
// Catatan: Ini adalah contoh penggunaan metode PATCH, untuk lebih banyak kombinasi silakan lihat POST
// Buat klien Resty
klien := resty.New()
// Kirim permintaan dengan tipe konten JSON
// Jika terdapat pengaturan tingkat klien, token otentikasi dapat dihilangkan, error
resp, err := klien.R().
SetBody(Article{
Tags: []string{"tag baru 1", "tag baru 2"},
}).
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // Atau SetError(Error{}).
Patch("https://myapp.com/articles/1234")
Permintaan DELETE, HEAD, OPTIONS
// Buat klien Resty
klien := resty.New()
// Hapus sebuah artikel
// Jika terdapat pengaturan tingkat klien, token otentikasi dapat dihilangkan, error
resp, err := klien.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // Atau SetError(Error{}).
Delete("https://myapp.com/articles/1234")
// Hapus beberapa artikel dengan JSON string sebagai payload/konten
// Jika terdapat pengaturan tingkat klien, token otentikasi dapat dihilangkan, error
resp, err := klien.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // Atau SetError(Error{}).
SetHeader("Content-Type", "application/json").
SetBody(`{article_ids: [1002, 1006, 1007, 87683, 45432] }`).
Delete("https://myapp.com/articles")
// Dapatkan informasi header dari sumber daya
// Jika terdapat pengaturan tingkat klien, token otentikasi dapat dihilangkan
resp, err := klien.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
Head("https://myapp.com/videos/hi-res-video")
// Dapatkan informasi opsi dari suatu sumber daya
// Jika terdapat pengaturan tingkat klien, token otentikasi dapat dihilangkan
resp, err := klien.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
Options("https://myapp.com/servers/nyc-dc-01")
Menyiapkan Operasi Serialisasi/Deserialisasi JSON dan XML
Pengguna dapat mendaftarkan pustaka JSON/XML pilihan mereka dengan resty, atau menulis pustaka mereka sendiri. Secara default, resty mendaftarkan pustaka standar encoding/json
dan encoding/xml
.
// Contoh pendaftaran json-iterator
import jsoniter "github.com/json-iterator/go"
json := jsoniter.ConfigCompatibleWithStandardLibrary
klien := resty.New().
SetJSONMarshaler(json.Marshal).
SetJSONUnmarshaler(json.Unmarshal)
// Demikian pula, pengguna dapat menyiapkan XML sebagai berikut -
klien.SetXMLMarshaler(xml.Marshal).
SetXMLUnmarshaler(xml.Unmarshal)