- Hands-On RESTful Web Services with Go
- Naren Yellavula
- 284字
- 2021-06-24 17:04:27
Path-based matching
A path parameter in the URL of an HTTP GET request looks like this:
https://example.org/articles/books/123
Since it is passed after the base URL and API endpoint, in this case https://example.org/articles/, they are called path parameters. In the preceding URL, books and 123 are path parameters. Let us see an example of how to create routes that can consume data supplied as path parameters. Follow these steps:
- Create a new file for our program at the following path:
touch -p $GOPATH/src/github.com/git-user/chapter2/muxRouter/main.go
- The idea is to create a new router, mux.NewRouter, and use it as a handler with in-built http.Server. We can attach URL endpoints to handler functions on this router object. The URL endpoints attached can also be regular expressions. The simple program to collect path parameters from a client HTTP request and return back the same looks like this:
package main
import (
"fmt"
"log"
"net/http"
"time"
"github.com/gorilla/mux"
)
func ArticleHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
w.WriteHeader(http.StatusOK)
fmt.Fprintf(w, "Category is: %v\n", vars["category"])
fmt.Fprintf(w, "ID is: %v\n", vars["id"])
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler)
srv := &http.Server{
Handler: r,
Addr: "127.0.0.1:8000",
WriteTimeout: 15 * time.Second,
ReadTimeout: 15 * time.Second,
}
log.Fatal(srv.ListenAndServe())
}
- Now run the server using the following command in a shell:
go run $GOPATH/src/github.com/git-user/chapter2/muxRouter/main.go
- Make a curl request from another shell and we can get the output as follows:
curl http://localhost:8000/articles/books/123
Category is: books ID is: 123
This example shows how to match and parse path parameters. There is one more popular way to collect variable information from an HTTP request and that is with query parameters. In the next section, we see how to create routes that match HTTP requests with query parameters.
推薦閱讀
- Rust實戰
- TestNG Beginner's Guide
- Hands-On Microservices with Kotlin
- INSTANT Django 1.5 Application Development Starter
- 前端HTML+CSS修煉之道(視頻同步+直播)
- C語言程序設計實驗指導 (第2版)
- SQL 經典實例
- Mastering Python Design Patterns
- OpenCV 3計算機視覺:Python語言實現(原書第2版)
- Python 快速入門(第3版)
- Instant GLEW
- Java自然語言處理(原書第2版)
- Java RESTful Web Service實戰
- Using Yocto Project with BeagleBone Black
- Web程序設計與架構