Documentation ¶
Overview ¶
Package app provides a thin layer of support for writing web services. It integrates with the ardanlabs kit repo to provide support for logging, configuration, database, routing and application context. The base things you need to write a web service is provided.
Current Status Codes:
200 OK : StatusOK : Call is success and returning data. 204 No Content : StatusNoContent : Call is success and returns no data. 400 Bad Request : StatusBadRequest : Invalid post data (syntax or semantics). 401 Unauthorized : StatusUnauthorized : Authentication failure. 404 Not Found : StatusNotFound : Invalid URL or identifier. 500 Internal : StatusInternalServerError : Application specific beyond scope of user.
Index ¶
- Constants
- Variables
- func ExecuteDB(session *mgo.Session, collectionName string, f func(*mgo.Collection) error) error
- func GetSession() *mgo.Session
- func Query(value interface{}) string
- func Run(host string, routes http.Handler, readTimeout, writeTimeout time.Duration) error
- type App
- type Context
- type Group
- type Handler
- type Invalid
- type Middleware
- type ProxyResponseWriter
Constants ¶
const TraceIDHeader = "X-Trace-ID"
TraceIDHeader is the header added to outgoing requests which adds the traceID to it.
Variables ¶
var ( // ErrNotAuthorized occurs when the call is not authorized. ErrNotAuthorized = errors.New("Not authorized") // ErrDBNotConfigured occurs when the DB is not initialized. ErrDBNotConfigured = errors.New("DB not initialized") // ErrNotFound is abstracting the mgo not found error. ErrNotFound = errors.New("Entity not found") // ErrInvalidID occurs when an ID is not in a valid form. ErrInvalidID = errors.New("ID is not in it's proper form") // ErrValidation occurs when there are validation errors. ErrValidation = errors.New("Validation errors occurred") )
Functions ¶
func GetSession ¶
func GetSession() *mgo.Session
GetSession returns a copy of the master session for use.
Types ¶
type App ¶
type App struct { *httptreemux.TreeMux Ctx map[string]interface{} // contains filtered or unexported fields }
App is the entrypoint into our application and what configures our context object for each of our http handlers. Feel free to add any configuration data/logic on this App struct
func New ¶
func New(mw ...Middleware) *App
New create an App value that handle a set of routes for the application. You can provide any number of middleware and they'll be used to wrap every request handler.
func (*App) CORS ¶
func (a *App) CORS()
CORS providing support for Cross-Origin Resource Sharing. https://metajack.im/2010/01/19/crossdomain-ajax-for-xmpp-http-binding-made-easy/
func (*App) Group ¶
func (a *App) Group(mw ...Middleware) *Group
Group creates a new App Group based on the current App and provided middleware.
func (*App) Handle ¶
func (a *App) Handle(verb, path string, handler Handler, mw ...Middleware)
Handle is our mechanism for mounting Handlers for a given HTTP verb and path pair, this makes for really easy, convenient routing.
func (*App) Use ¶
func (a *App) Use(mw ...Middleware)
Use adds the set of provided middleware onto the Application middleware chain. Any route running off of this App will use all the middleware provided this way always regardless of the ordering of the Handle/Use functions.
type Context ¶
type Context struct { http.ResponseWriter Request *http.Request Now time.Time Params map[string]string SessionID string Status int Ctx map[string]interface{} App *App }
Context contains data associated with a single request.
func (*Context) Proxy ¶
Proxy will setup a direct proxy inbetween this service and the destination service.
func (*Context) Respond ¶
Respond sends JSON to the client. If code is StatusNoContent, v is expected to be nil.
func (*Context) RespondError ¶
RespondError sends JSON describing the error
func (*Context) RespondInvalid ¶
RespondInvalid sends JSON describing field validation errors.
type Group ¶
type Group struct {
// contains filtered or unexported fields
}
Group allows a segment of middleware to be shared amongst handlers.
func (*Group) Handle ¶
func (g *Group) Handle(verb, path string, handler Handler, mw ...Middleware)
Handle proxies the Handle function of the underlying App.
func (*Group) Use ¶
func (g *Group) Use(mw ...Middleware)
Use adds the set of provided middleware onto the Application middleware chain.
type Handler ¶
A Handler is a type that handles an http request within our own little mini framework. The fun part is that our context is fully controlled and configured by us so we can extend the functionality of the Context whenever we want.
type Middleware ¶
A Middleware is a type that wraps a handler to remove boilerplate or other concerns not direct to any given Handler.
type ProxyResponseWriter ¶
type ProxyResponseWriter struct { Status int http.ResponseWriter }
ProxyResponseWriter records the status code written by a call to the WriteHeader function on a http.ResponseWriter interface. This type also implements the http.ResponseWriter interface.
func (*ProxyResponseWriter) Header ¶
func (prw *ProxyResponseWriter) Header() http.Header
Header implements the http.ResponseWriter interface and simply relays the request.
func (*ProxyResponseWriter) Write ¶
func (prw *ProxyResponseWriter) Write(data []byte) (int, error)
Write implements the http.ResponseWriter interface and simply relays the request.
func (*ProxyResponseWriter) WriteHeader ¶
func (prw *ProxyResponseWriter) WriteHeader(status int)
WriteHeader implements the http.ResponseWriter interface and simply relays the request and records the status code written.