Skip to content

Latest commit

 

History

History
63 lines (48 loc) · 2.08 KB

mux.md

File metadata and controls

63 lines (48 loc) · 2.08 KB
id title sidebar_label
mux
Muxing Twirp with other HTTP services
Muxing Twirp services

If you want run your server next to other http.Handlers, you'll need to use a mux. The generated code includes a path prefix that you can use for routing Twirp requests correctly. It's an exported string const, always as <ServiceName>PathPrefix, and it is the prefix for all Twirp requests.

For example, you could use it with http.ServeMux like this:

serverImpl := &haberdasherserver.Server{}
twirpHandler := haberdasher.NewHaberdasherServer(serverImpl)

mux := http.NewServeMux()
mux.Handle(twirpHandler.PathPrefix(), twirpHandler)
mux.Handle("/some/other/path", someOtherHandler)

http.ListenAndServe(":8080", mux)

You can also serve your Handler on many third-party muxes which accept http.Handlers. For example, on a goji.Mux:

serverImpl := &haberdasherserver.Server{} // implements Haberdasher interface
twirpHandler := haberdasher.NewHaberdasherServer(serverImpl)

mux := goji.NewMux()
mux.Handle(pat.Post(twirpHandler.PathPrefix()+"*"), twirpHandler)
// mux.Handle other things like health checks ...
http.ListenAndServe("localhost:8000", mux)

Using a different path prefix

By default, Twirp routes have a "/twirp" path prefix. See Routing for more info.

While the URL format can not be customized, the prefix can be changed to allow mounting the service in different routes. Use the option twirp.WithServerPathPrefix:

serverImpl := &haberdasherserver.Server{}
twirpHandler := haberdasher.NewHaberdasherServer(serverImpl,
    twirp.WithServerPathPrefix("/my/custom/prefix"))

mux := http.NewServeMux()
mux.Handle(twirpHandler.PathPrefix(), twirpHandler)
http.ListenAndServe(":8080", mux)

The clients must be initialized with the same prefix to send requests to the right routes. Use the option twirp.WithClientPathPrefix:

client := haberdasher.NewHaberdasherProtoClient(s.URL, http.DefaultClient,
    twirp.WithClientPathPrefix("/my/custom/prefix"))
resp, err := c.MakeHat(ctx, &Size{Inches: 1})