Go Resty ist eine Go-Sprachbibliothek für den Aufbau von RESTful-API-Clients. Mit Go Resty können Entwickler zuverlässige RESTful-API-Clients schneller und effizienter erstellen. In diesem Kapitel wird erläutert, wie Sie schnell mit Go Resty starten können.
Installation
require github.com/go-resty/resty/v2 v2.7.0
oder
go get github.com/go-resty/resty/v2
Resty Beispiel
Die folgenden Beispiele sollen Ihnen helfen, die Resty-Bibliothek so komfortabel wie möglich zu nutzen.
// Importieren Sie resty in Ihren Code und beziehen Sie es als `resty`.
import "github.com/go-resty/resty/v2"
Einfacher GET-Request
// Erstellen Sie einen Resty-Client
client := resty.New()
resp, err := client.R().
EnableTrace().
Get("https://httpbin.org/get")
// Untersuchen des Antwortobjekts
fmt.Println("Response Info:")
fmt.Println(" Fehler :", err)
fmt.Println(" Statuscode :", resp.StatusCode())
fmt.Println(" Status :", resp.Status())
fmt.Println(" Protokoll :", resp.Proto())
fmt.Println(" Zeit :", resp.Time())
fmt.Println(" Empfangen :", resp.ReceivedAt())
fmt.Println(" Body :\n", resp)
fmt.Println()
// Untersuchen der Tracking-Informationen
fmt.Println("Anfrage-Trace-Info:")
ti := resp.Request.TraceInfo()
fmt.Println(" DNS-Suche :", ti.DNSLookup)
fmt.Println(" Verbindungszeit :", ti.ConnTime)
fmt.Println(" TCP-Verbindungszeit:", ti.TCPConnTime)
fmt.Println(" TLS-Handshake :", ti.TLSHandshake)
fmt.Println(" Serverzeit :", ti.ServerTime)
fmt.Println(" Antwortzeit :", ti.ResponseTime)
fmt.Println(" Gesamtzeit :", ti.TotalTime)
fmt.Println(" Wird Verbindung wiederverwendet :", ti.IsConnReused)
fmt.Println(" Verbindung war untätig :", ti.IsConnWasIdle)
fmt.Println(" Untätige Zeit der Verbindung :", ti.ConnIdleTime)
fmt.Println(" Anfrageversuch :", ti.RequestAttempt)
fmt.Println(" Remote-Adresse :", ti.RemoteAddr.String())
Ausgabe
Response Info:
Fehler :
Statuscode : 200
Status : 200 OK
Protokoll : HTTP/2.0
Zeit : 457.034718ms
Empfangen : 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"
}
Anfrage-Trace-Info:
DNS-Suche : 4.074657ms
Verbindungszeit : 381.709936ms
TCP-Verbindungszeit: 77.428048ms
TLS-Handshake : 299.623597ms
Serverzeit : 75.414703ms
Antwortzeit : 79.337µs
Gesamtzeit : 457.034718ms
Wird Verbindung wiederverwendet : false
Verbindung war untätig : false
Untätige Zeit der Verbindung : 0s
Anfrageversuch : 1
Remote-Adresse : 3.221.81.55:443
Komplexer GET-Request
// Resty-Client erstellen
client := resty.New()
// Abfrageparameter setzen
resp, err := client.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")
// Beispiel für die Verwendung der Request.SetQueryString-Methode
resp, err := client.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")
// Falls erforderlich, zwingen Sie den spezifischen Antwort-Content-Typ, um Resty anzuweisen, die JSON-Antwort in Ihre Struktur zu parsen
resp, err := client.R().
SetResult(result).
ForceContentType("application/json").
Get("v2/alpine/manifests/latest")
Verschiedene Beispiele für POST-Requests
// Resty-Client erstellen
client := resty.New()
// JSON-Zeichenkette posten
// Wenn auf Clientebene Einstellungen festgelegt wurden, muss der Content-Type nicht gesetzt werden
resp, err := client.R().
SetHeader("Content-Type", "application/json").
SetBody(`{"username":"testuser", "password":"testpass"}`).
SetResult(&AuthSuccess{}). // oder SetResult(AuthSuccess{}).
Post("https://myapp.com/login")
// []byte-Array posten
// Wenn auf Clientebene Einstellungen festgelegt wurden, muss der Content-Type nicht gesetzt werden
resp, err := client.R().
SetHeader("Content-Type", "application/json").
SetBody([]byte(`{"username":"testuser", "password":"testpass"}`)).
SetResult(&AuthSuccess{}). // oder SetResult(AuthSuccess{}).
Post("https://myapp.com/login")
// Struktur posten, standardmäßig JSON-Content-Typ, muss nicht gesetzt werden
resp, err := client.R().
SetBody(User{Username: "testuser", Password: "testpass"}).
SetResult(&AuthSuccess{}). // oder SetResult(AuthSuccess{}).
SetError(&AuthError{}). // oder SetError(AuthError{}).
Post("https://myapp.com/login")
// Map posten, standardmäßig JSON-Content-Typ, muss nicht gesetzt werden
resp, err := client.R().
SetBody(map[string]interface{}{"username": "testuser", "password": "testpass"}).
SetResult(&AuthSuccess{}). // oder SetResult(AuthSuccess{}).
SetError(&AuthError{}). // oder SetError(AuthError{}).
Post("https://myapp.com/login")
// Datei als Raw-Byte-Array hochladen. Beispiel: Eine Datei in Dropbox hochladen
fileBytes, _ := os.ReadFile("/Users/jeeva/mydocument.pdf")
// Beachten Sie, dass wir den Content-Type-Header nicht setzen, da go-resty automatisch den Content-Type erkennt
resp, err := client.R().
SetBody(fileBytes).
SetContentLength(true). // Dropbox erfordert diesen Wert
SetAuthToken("").
SetError(&DropboxError{}). // oder SetError(DropboxError{}).
Post("https://content.dropboxapi.com/1/files_put/auto/resty/mydocument.pdf") // DropBox unterstützt auch das Hochladen per PUT-Methode
// Hinweis: Wenn der Content-Type-Header nicht gesetzt ist, erkennt Resty den Content-Type des Anforderungskörpers automatisch
// * Bei Struktur- und Mappendaten-Typen ist standardmäßig 'application/json'
// * Ansonsten ist es der normale Text-Content-Type
PUT-Anforderung
Sie können verschiedene Kombinationen des PUT
-Methodenaufrufs verwenden, ähnlich wie für POST
dargestellt.
// Hinweis: Dies ist ein Beispiel für die Verwendung der PUT-Methode, für weitere Kombinationen siehe bitte POST
// Erstellen Sie einen Resty-Client
client := resty.New()
// Senden Sie die Anfrage mit dem JSON-Inhaltstyp
// Sofern esEinstellungen auf Client-Ebene gibt, kann das Authentifizierungstoken ausgelassen werden, Fehler
resp, err := client.R().
SetBody(Article{
Title: "go-resty",
Content: "Dies ist mein Artikelinhalt, oh ja!",
Author: "Jeevanandam M",
Tags: []string{"Artikel", "Beispiel", "resty"},
}).
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // Oder SetError(Error{}).
Put("https://myapp.com/article/1234")
PATCH-Anforderung
Sie können verschiedene Kombinationen des PATCH
-Methodenaufrufs verwenden, ähnlich wie für POST
dargestellt.
// Hinweis: Dies ist ein Beispiel für die Verwendung der PATCH-Methode, für weitere Kombinationen siehe bitte POST
// Erstellen Sie einen Resty-Client
client := resty.New()
// Senden Sie die Anfrage mit dem JSON-Inhaltstyp
// Sofern esEinstellungen auf Client-Ebene gibt, kann das Authentifizierungstoken ausgelassen werden, Fehler
resp, err := client.R().
SetBody(Article{
Tags: []string{"Neues Tag 1", "Neues Tag 2"},
}).
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // Oder SetError(Error{}).
Patch("https://myapp.com/articles/1234")
DELETE-, HEAD- und OPTIONS-Anfrage
// Erstellen Sie einen Resty-Client
client := resty.New()
// Löschen eines Artikels
// Sofern esEinstellungen auf Client-Ebene gibt, kann das Authentifizierungstoken ausgelassen werden, Fehler
resp, err := client.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // Oder SetError(Error{}).
Delete("https://myapp.com/articles/1234")
// Löschen mehrerer Artikel mit JSON-String als Nutzlast/Inhalt
// Sofern esEinstellungen auf Client-Ebene gibt, kann das Authentifizierungstoken ausgelassen werden, Fehler
resp, err := client.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // Oder SetError(Error{}).
SetHeader("Content-Type", "application/json").
SetBody(`{article_ids: [1002, 1006, 1007, 87683, 45432] }`).
Delete("https://myapp.com/articles")
// Informationen zum Header einer Ressource abrufen
// Sofern esEinstellungen auf Client-Ebene gibt, kann das Authentifizierungstoken ausgelassen werden
resp, err := client.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
Head("https://myapp.com/videos/hi-res-video")
// Informationen zu den Optionen einer Ressource abrufen
// Sofern esEinstellungen auf Client-Ebene gibt, kann das Authentifizierungstoken ausgelassen werden
resp, err := client.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
Options("https://myapp.com/servers/nyc-dc-01")
Einrichten von JSON- und XML-Serialisierungs-/Deserialisierungsoperationen
Benutzer können ihre bevorzugten JSON/XML-Bibliotheken mit Resty registrieren oder ihre eigenen Bibliotheken schreiben. Standardmäßig registriert Resty die Standardbibliotheken encoding/json
und encoding/xml
.
// Beispiel zur Registrierung von json-iterator
import jsoniter "github.com/json-iterator/go"
json := jsoniter.ConfigCompatibleWithStandardLibrary
client := resty.New().
SetJSONMarshaler(json.Marshal).
SetJSONUnmarshaler(json.Unmarshal)
// Ebenso können Benutzer XML wie folgt einrichten -
client.SetXMLMarshaler(xml.Marshal).
SetXMLUnmarshaler(xml.Unmarshal)