Net/HTTP library¶
Funkcje handlujące¶
Aby odpowiadać na zapytania, musimy stworzyć funkcje handlującą i przypisać ją do ścieżki. Używamy http.HandleFunc
, która przyjmuje ścieżkę oraz funkcję o specjalnej sygnaturze.
func d(res http.ResponseWriter, req *http.Request) {
io.WriteString(res, "dog dog dog")
}
http.HandleFunc("/dog", d)
http.ListenAndServe(":8080", nil)
Możemy też użyć funkcji http.Handle, podobnej do http.HandleFunc
. Ta funkcja przyjmuje także ścieżkę oraz obiekt typu Handler, który realizuje specjalny interface. Można użyć funkcji http.HandlerFunc
, która jako argument przyjmuje funkcję o specjalnej sygnaturze i zwraca obiekt typu Handler
.
func c(res http.ResponseWriter, req *http.Request) {
io.WriteString(res, "cat cat cat")
}
func main() {
http.Handle("/dog", http.HandlerFunc(d))
http.ListenAndServe(":8080", nil)
}
Wysyłanie zapytania¶
Wysłanie zapytania składa się z części: 1. Utworzenie nowego zapytania:
url := "https://api.example.com/data"
req, err := http.NewRequest("GET", url, nil)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
func (c *Client) Get(url string) (resp *Response, err error
func (c *Client) Post(url, contentType string, body io.Reader) (resp *Response, err error)
Odbieranie zapytania POST¶
Odbierając zapytanie mamy dostęp do wskaźnika do struktury *http.Request
. Należy wtedy wykonać odpowiednie funkcje:
req.ParseForm()
– parsuje dane formularza przesłane daną metodą (POST) req.PostForm.Get("name")
ServeMux, method based routing¶
Można tworzyć drzewa multiplekserów, które będą handlować zapytaniami.
Teraz, aby dodać rodzinę adresów dla podroutera dla danego prefiksu wywołujemy na glównym routerze:router.Handle("/api/", http.StripPrefix("/api", subrouter))
Zauwazmy, ze http.ServeMux
implementuje interfejs Handler
.