Documentation
¶
Overview ¶
package server implements a Google Cloud Endpoints server.
The server does simple transforms on requests that come in to /_ah/api and then re-dispatches them to /_ah/spi. It does not do any authentication, quota checking, DoS checking, etc.
In addition, the server loads api configs from /_ah/spi/BackendService.getApiConfigs prior to each call, in case the configuration has changed.
Index ¶
- type EndpointsServer
- func (ed *EndpointsServer) HandleApiExplorerRequest(w http.ResponseWriter, r *http.Request)
- func (ed *EndpointsServer) HandleApiStaticRequest(w http.ResponseWriter, r *http.Request)
- func (ed *EndpointsServer) HandleHttp(mux *http.ServeMux)
- func (ed *EndpointsServer) ServeHTTP(w http.ResponseWriter, r *http.Request)
- func (ed *EndpointsServer) SetURL(u *url.URL)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type EndpointsServer ¶
type EndpointsServer struct {
// contains filtered or unexported fields
}
HTTP handler for requests to the built-in api-server handlers.
Example ¶
package main
import (
"bytes"
"encoding/json"
"fmt"
"github.com/rwl/endpoints/server"
"github.com/rwl/go-endpoints/endpoints"
"io/ioutil"
"net/http"
"net/http/httptest"
"net/url"
"time"
)
// Request type for the Message.Echo method.
type EchoReq struct {
Message string `json:"message"`
Delay int `json:"delay" endpoints:"d=2"`
}
// Response type for the MessageService.Echo method.
type EchoResp struct {
Message string `json:"message"`
Date time.Time `json:"date"`
}
// EchoService echoes a message after a delay.
type EchoService struct {
}
// Echo responds with the given message after the specified delay.
func (s *EchoService) Echo(_ *http.Request, req *EchoReq, resp *EchoResp) error {
if req.Delay < 0 {
req.Delay = 0
}
time.Sleep(time.Duration(req.Delay) * time.Second)
resp.Message = req.Message
resp.Date = time.Now()
return nil
}
func main() {
spi := endpoints.NewServer("")
echoService := &EchoService{}
echoApi, _ := spi.RegisterService(echoService, "echo",
"v1", "Echo API", true)
info := echoApi.MethodByName("Echo").Info()
info.Name = "message.echo"
info.HttpMethod = "GET"
info.Path = "echo"
info.Desc = "Echo messages."
mux := http.NewServeMux()
ts := httptest.NewServer(mux)
defer ts.Close()
spi.HandleHttp(mux)
// The URL that SPI requests should be dispatched to.
u, _ := url.Parse(ts.URL)
api := server.NewEndpointsServer(u)
api.HandleHttp(mux)
message := map[string]interface{}{
"message": "The quick red fox jumped over the lazy brown dog",
//"delay": 2,
}
body, _ := json.Marshal(message)
buf := bytes.NewBuffer(body)
uu := ts.URL + "/_ah/api/echo/v1/echo?delay=0"
req, _ := http.NewRequest("GET", uu, buf)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
bytes, _ := ioutil.ReadAll(resp.Body)
resp.Body.Close()
var jsonResp map[string]interface{}
json.Unmarshal(bytes, &jsonResp)
fmt.Print(jsonResp["message"])
}
Output: The quick red fox jumped over the lazy brown dog
func NewEndpointsServer ¶
func NewEndpointsServer(URL *url.URL) *EndpointsServer
NewEndpointsServer returns a new EndpointsServer that will dispatch SPI requests to the given URL.
func NewEndpointsServerRoot ¶
func NewEndpointsServerRoot(root string, URL *url.URL) *EndpointsServer
func (*EndpointsServer) HandleApiExplorerRequest ¶
func (ed *EndpointsServer) HandleApiExplorerRequest(w http.ResponseWriter, r *http.Request)
Handler for requests to /explorer.
func (*EndpointsServer) HandleApiStaticRequest ¶
func (ed *EndpointsServer) HandleApiStaticRequest(w http.ResponseWriter, r *http.Request)
Handler for requests to /static/.*.
func (*EndpointsServer) HandleHttp ¶
func (ed *EndpointsServer) HandleHttp(mux *http.ServeMux)
Configures the server to handler API requests to the default paths. If mux is not specified then http.DefaultServeMux is used.
func (*EndpointsServer) ServeHTTP ¶
func (ed *EndpointsServer) ServeHTTP(w http.ResponseWriter, r *http.Request)
EndpointsServer implements the http.Handler interface.
func (*EndpointsServer) SetURL ¶
func (ed *EndpointsServer) SetURL(u *url.URL)
Sets the URL for SPI dispatches to have the form http://ipaddr:port with no trailing slash.