12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package main
- import (
- "log"
- "net/http"
- "github.com/emicklei/go-restful"
- "github.com/emicklei/go-restful/swagger"
- )
- type Book struct {
- Title string
- Author string
- }
- func main() {
- ws := new(restful.WebService)
- ws.Path("/books")
- ws.Consumes(restful.MIME_JSON, restful.MIME_XML)
- ws.Produces(restful.MIME_JSON, restful.MIME_XML)
- restful.Add(ws)
- ws.Route(ws.GET("/{medium}").To(noop).
- Doc("Search all books").
- Param(ws.PathParameter("medium", "digital or paperback").DataType("string")).
- Param(ws.QueryParameter("language", "en,nl,de").DataType("string")).
- Param(ws.HeaderParameter("If-Modified-Since", "last known timestamp").DataType("datetime")).
- Do(returns200, returns500))
- ws.Route(ws.PUT("/{medium}").To(noop).
- Doc("Add a new book").
- Param(ws.PathParameter("medium", "digital or paperback").DataType("string")).
- Reads(Book{}))
- // You can install the Swagger Service which provides a nice Web UI on your REST API
- // You need to download the Swagger HTML5 assets and change the FilePath location in the config below.
- // Open http://localhost:8080/apidocs and enter http://localhost:8080/apidocs.json in the api input field.
- config := swagger.Config{
- WebServices: restful.DefaultContainer.RegisteredWebServices(), // you control what services are visible
- WebServicesUrl: "http://localhost:8080",
- ApiPath: "/apidocs.json",
- // Optionally, specifiy where the UI is located
- SwaggerPath: "/apidocs/",
- SwaggerFilePath: "/Users/emicklei/xProjects/swagger-ui/dist"}
- swagger.RegisterSwaggerService(config, restful.DefaultContainer)
- log.Printf("start listening on localhost:8080")
- server := &http.Server{Addr: ":8080", Handler: restful.DefaultContainer}
- log.Fatal(server.ListenAndServe())
- }
- func noop(req *restful.Request, resp *restful.Response) {}
- func returns200(b *restful.RouteBuilder) {
- b.Returns(http.StatusOK, "OK", Book{})
- }
- func returns500(b *restful.RouteBuilder) {
- b.Returns(http.StatusInternalServerError, "Bummer, something went wrong", nil)
- }
|