2016-05-30 16:08:09 +02:00
package iris
import (
"github.com/kataras/iris/config"
"github.com/kataras/iris/logger"
2016-06-01 14:29:38 +02:00
"github.com/kataras/iris/mail"
2016-05-30 16:08:09 +02:00
"github.com/kataras/iris/render/rest"
"github.com/kataras/iris/render/template"
"github.com/kataras/iris/server"
"github.com/kataras/iris/websocket"
)
// DefaultIris in order to use iris.Get(...,...) we need a default Iris on the package level
var DefaultIris * Iris = New ( )
// Listen starts the standalone http server
// which listens to the addr parameter which as the form of
// host:port or just port
//
// It panics on error if you need a func to return an error use the ListenWithErr
// ex: iris.Listen(":8080")
func Listen ( addr string ) {
DefaultIris . Listen ( addr )
}
// ListenWithErr starts the standalone http server
// which listens to the addr parameter which as the form of
// host:port or just port
//
// It returns an error you are responsible how to handle this
// if you need a func to panic on error use the Listen
// ex: log.Fatal(iris.ListenWithErr(":8080"))
func ListenWithErr ( addr string ) error {
return DefaultIris . ListenWithErr ( addr )
}
// ListenTLS Starts a https server with certificates,
// if you use this method the requests of the form of 'http://' will fail
// only https:// connections are allowed
// which listens to the addr parameter which as the form of
// host:port or just port
//
// It panics on error if you need a func to return an error use the ListenTLSWithErr
// ex: iris.ListenTLS(":8080","yourfile.cert","yourfile.key")
func ListenTLS ( addr string , certFile , keyFile string ) {
DefaultIris . ListenTLS ( addr , certFile , keyFile )
}
// ListenTLSWithErr Starts a https server with certificates,
// if you use this method the requests of the form of 'http://' will fail
// only https:// connections are allowed
// which listens to the addr parameter which as the form of
// host:port or just port
//
// It returns an error you are responsible how to handle this
// if you need a func to panic on error use the ListenTLS
// ex: log.Fatal(iris.ListenTLSWithErr(":8080","yourfile.cert","yourfile.key"))
func ListenTLSWithErr ( addr string , certFile , keyFile string ) error {
return DefaultIris . ListenTLSWithErr ( addr , certFile , keyFile )
}
// Close is used to close the net.Listener of the standalone http server which has already running via .Listen
func Close ( ) { DefaultIris . Close ( ) }
// Router implementation
// Party is just a group joiner of routes which have the same prefix and share same middleware(s) also.
// Party can also be named as 'Join' or 'Node' or 'Group' , Party chosen because it has more fun
func Party ( path string , handlersFn ... HandlerFunc ) IParty {
return DefaultIris . Party ( path , handlersFn ... )
}
// Handle registers a route to the server's router
// if empty method is passed then registers handler(s) for all methods, same as .Any
2016-06-02 03:45:03 +02:00
func Handle ( method string , registedPath string , handlers ... Handler ) IRoute {
return DefaultIris . Handle ( method , registedPath , handlers ... )
2016-05-30 16:08:09 +02:00
}
// HandleFunc registers a route with a method, path string, and a handler
2016-06-02 03:45:03 +02:00
func HandleFunc ( method string , path string , handlersFn ... HandlerFunc ) IRoute {
return DefaultIris . HandleFunc ( method , path , handlersFn ... )
2016-05-30 16:08:09 +02:00
}
// API converts & registers a custom struct to the router
2016-06-02 03:45:03 +02:00
// receives two parameters
2016-05-30 16:08:09 +02:00
// first is the request path (string)
2016-06-02 03:45:03 +02:00
// second is the custom struct (interface{}) which can be anything that has a *iris.Context as field.
2016-05-30 16:08:09 +02:00
// third are the common middlewares, is optional parameter
//
2016-06-02 03:45:03 +02:00
// Note that API's routes have their default-name to the full registed path,
// no need to give a special name for it, because it's not supposed to be used inside your templates.
//
2016-05-30 16:08:09 +02:00
// Recommend to use when you retrieve data from an external database,
// and the router-performance is not the (only) thing which slows the server's overall performance.
//
// This is a slow method, if you care about router-performance use the Handle/HandleFunc/Get/Post/Put/Delete/Trace/Options... instead
//
// Usage:
// All the below methods are optional except the *iris.Context field,
// example with /users :
/ *
package main
import (
"github.com/kataras/iris"
)
type UserAPI struct {
* iris . Context
}
// GET /users
func ( u UserAPI ) Get ( ) {
u . Write ( "Get from /users" )
// u.JSON(iris.StatusOK,myDb.AllUsers())
}
// GET /:param1 which its value passed to the id argument
func ( u UserAPI ) GetBy ( id string ) { // id equals to u.Param("param1")
u . Write ( "Get from /users/%s" , id )
// u.JSON(iris.StatusOK, myDb.GetUserById(id))
}
// PUT /users
func ( u UserAPI ) Put ( ) {
name := u . FormValue ( "name" )
// myDb.InsertUser(...)
println ( string ( name ) )
println ( "Put from /users" )
}
// POST /users/:param1
func ( u UserAPI ) PostBy ( id string ) {
name := u . FormValue ( "name" ) // you can still use the whole Context's features!
// myDb.UpdateUser(...)
println ( string ( name ) )
println ( "Post from /users/" + id )
}
// DELETE /users/:param1
func ( u UserAPI ) DeleteBy ( id string ) {
// myDb.DeleteUser(id)
println ( "Delete from /" + id )
}
func main ( ) {
iris . API ( "/users" , UserAPI { } )
iris . Listen ( ":80" )
}
* /
func API ( registedPath string , controller HandlerAPI , middlewares ... HandlerFunc ) error {
return DefaultIris . API ( registedPath , controller , middlewares ... )
}
// Use appends a middleware to the route or to the router if it's called from router
func Use ( handlers ... Handler ) {
DefaultIris . Use ( handlers ... )
}
// UseFunc same as Use but it accepts/receives ...HandlerFunc instead of ...Handler
// form of acceptable: func(c *iris.Context){//first middleware}, func(c *iris.Context){//second middleware}
func UseFunc ( handlersFn ... HandlerFunc ) {
DefaultIris . UseFunc ( handlersFn ... )
}
// Get registers a route for the Get http method
2016-06-02 03:45:03 +02:00
func Get ( path string , handlersFn ... HandlerFunc ) RouteNameFunc {
return DefaultIris . Get ( path , handlersFn ... )
2016-05-30 16:08:09 +02:00
}
// Post registers a route for the Post http method
2016-06-02 03:45:03 +02:00
func Post ( path string , handlersFn ... HandlerFunc ) RouteNameFunc {
return DefaultIris . Post ( path , handlersFn ... )
2016-05-30 16:08:09 +02:00
}
// Put registers a route for the Put http method
2016-06-02 03:45:03 +02:00
func Put ( path string , handlersFn ... HandlerFunc ) RouteNameFunc {
return DefaultIris . Put ( path , handlersFn ... )
2016-05-30 16:08:09 +02:00
}
// Delete registers a route for the Delete http method
2016-06-02 03:45:03 +02:00
func Delete ( path string , handlersFn ... HandlerFunc ) RouteNameFunc {
return DefaultIris . Delete ( path , handlersFn ... )
2016-05-30 16:08:09 +02:00
}
// Connect registers a route for the Connect http method
2016-06-02 03:45:03 +02:00
func Connect ( path string , handlersFn ... HandlerFunc ) RouteNameFunc {
return DefaultIris . Connect ( path , handlersFn ... )
2016-05-30 16:08:09 +02:00
}
// Head registers a route for the Head http method
2016-06-02 03:45:03 +02:00
func Head ( path string , handlersFn ... HandlerFunc ) RouteNameFunc {
return DefaultIris . Head ( path , handlersFn ... )
2016-05-30 16:08:09 +02:00
}
// Options registers a route for the Options http method
2016-06-02 03:45:03 +02:00
func Options ( path string , handlersFn ... HandlerFunc ) RouteNameFunc {
return DefaultIris . Options ( path , handlersFn ... )
2016-05-30 16:08:09 +02:00
}
// Patch registers a route for the Patch http method
2016-06-02 03:45:03 +02:00
func Patch ( path string , handlersFn ... HandlerFunc ) RouteNameFunc {
return DefaultIris . Patch ( path , handlersFn ... )
2016-05-30 16:08:09 +02:00
}
// Trace registers a route for the Trace http methodd
2016-06-02 03:45:03 +02:00
func Trace ( path string , handlersFn ... HandlerFunc ) RouteNameFunc {
return DefaultIris . Trace ( path , handlersFn ... )
2016-05-30 16:08:09 +02:00
}
// Any registers a route for ALL of the http methods (Get,Post,Put,Head,Patch,Options,Connect,Delete)
2016-06-02 03:45:03 +02:00
func Any ( path string , handlersFn ... HandlerFunc ) [ ] IRoute {
return DefaultIris . Any ( path , handlersFn ... )
}
// RouteByName returns a route by its name,if not found then returns a route with empty path
// Note that the searching is case-sensitive
func RouteByName ( lookUpName string ) IRoute {
return DefaultIris . RouteByName ( lookUpName )
2016-05-30 16:08:09 +02:00
}
// StaticHandlerFunc returns a HandlerFunc to serve static system directory
// Accepts 5 parameters
//
// first is the systemPath (string)
// Path to the root directory to serve files from.
//
// second is the stripSlashes (int) level
// * stripSlashes = 0, original path: "/foo/bar", result: "/foo/bar"
// * stripSlashes = 1, original path: "/foo/bar", result: "/bar"
// * stripSlashes = 2, original path: "/foo/bar", result: ""
//
// third is the compress (bool)
// Transparently compresses responses if set to true.
//
// The server tries minimizing CPU usage by caching compressed files.
// It adds FSCompressedFileSuffix suffix to the original file name and
// tries saving the resulting compressed file under the new file name.
// So it is advisable to give the server write access to Root
// and to all inner folders in order to minimze CPU usage when serving
// compressed responses.
//
// fourth is the generateIndexPages (bool)
// Index pages for directories without files matching IndexNames
// are automatically generated if set.
//
// Directory index generation may be quite slow for directories
// with many files (more than 1K), so it is discouraged enabling
// index pages' generation for such directories.
//
// fifth is the indexNames ([]string)
// List of index file names to try opening during directory access.
//
// For example:
//
// * index.html
// * index.htm
// * my-super-index.xml
//
func StaticHandlerFunc ( systemPath string , stripSlashes int , compress bool , generateIndexPages bool , indexNames [ ] string ) HandlerFunc {
return DefaultIris . StaticHandlerFunc ( systemPath , stripSlashes , compress , generateIndexPages , indexNames )
}
// Static registers a route which serves a system directory
// this doesn't generates an index page which list all files
// no compression is used also, for these features look at StaticFS func
// accepts three parameters
// first parameter is the request url path (string)
// second parameter is the system directory (string)
// third parameter is the level (int) of stripSlashes
// * stripSlashes = 0, original path: "/foo/bar", result: "/foo/bar"
// * stripSlashes = 1, original path: "/foo/bar", result: "/bar"
// * stripSlashes = 2, original path: "/foo/bar", result: ""
func Static ( reqPath string , systemPath string , stripSlashes int ) {
DefaultIris . Static ( reqPath , systemPath , stripSlashes )
}
// StaticFS registers a route which serves a system directory
// generates an index page which list all files
// uses compression which file cache, if you use this method it will generate compressed files also
// think this function as small fileserver with http
// accepts three parameters
// first parameter is the request url path (string)
// second parameter is the system directory (string)
// third parameter is the level (int) of stripSlashes
// * stripSlashes = 0, original path: "/foo/bar", result: "/foo/bar"
// * stripSlashes = 1, original path: "/foo/bar", result: "/bar"
// * stripSlashes = 2, original path: "/foo/bar", result: ""
func StaticFS ( reqPath string , systemPath string , stripSlashes int ) {
DefaultIris . StaticFS ( reqPath , systemPath , stripSlashes )
}
// StaticWeb same as Static but if index.html exists and request uri is '/' then display the index.html's contents
// accepts three parameters
// first parameter is the request url path (string)
// second parameter is the system directory (string)
// third parameter is the level (int) of stripSlashes
// * stripSlashes = 0, original path: "/foo/bar", result: "/foo/bar"
// * stripSlashes = 1, original path: "/foo/bar", result: "/bar"
// * stripSlashes = 2, original path: "/foo/bar", result: ""
func StaticWeb ( reqPath string , systemPath string , stripSlashes int ) {
DefaultIris . StaticWeb ( reqPath , systemPath , stripSlashes )
}
// StaticServe serves a directory as web resource
// it's the simpliest form of the Static* functions
// Almost same usage as StaticWeb
// accepts only one required parameter which is the systemPath ( the same path will be used to register the GET&HEAD routes)
// if second parameter is empty, otherwise the requestPath is the second parameter
// it uses gzip compression (compression on each request, no file cache)
func StaticServe ( systemPath string , requestPath ... string ) {
DefaultIris . StaticServe ( systemPath , requestPath ... )
}
// Favicon serves static favicon
// accepts 2 parameters, second is optionally
// favPath (string), declare the system directory path of the __.ico
// requestPath (string), it's the route's path, by default this is the "/favicon.ico" because some browsers tries to get this by default first,
// you can declare your own path if you have more than one favicon (desktop, mobile and so on)
//
// this func will add a route for you which will static serve the /yuorpath/yourfile.ico to the /yourfile.ico (nothing special that you can't handle by yourself)
// Note that you have to call it on every favicon you have to serve automatically (dekstop, mobile and so on)
//
// returns an error if something goes bad
func Favicon ( favPath string , requestPath ... string ) error {
return DefaultIris . Favicon ( favPath )
}
// StaticContent serves bytes, memory cached, on the reqPath
func StaticContent ( reqPath string , contentType string , content [ ] byte ) {
DefaultIris . StaticContent ( reqPath , contentType , content )
}
// OnError Registers a handler for a specific http error status
func OnError ( httpStatus int , handler HandlerFunc ) {
DefaultIris . OnError ( httpStatus , handler )
}
// EmitError executes the handler of the given error http status code
func EmitError ( httpStatus int , ctx * Context ) {
DefaultIris . EmitError ( httpStatus , ctx )
}
// OnNotFound sets the handler for http status 404,
// default is a response with text: 'Not Found' and status: 404
func OnNotFound ( handlerFunc HandlerFunc ) {
DefaultIris . OnNotFound ( handlerFunc )
}
// OnPanic sets the handler for http status 500,
// default is a response with text: The server encountered an unexpected condition which prevented it from fulfilling the request. and status: 500
func OnPanic ( handlerFunc HandlerFunc ) {
DefaultIris . OnPanic ( handlerFunc )
}
// ***********************
// Export DefaultIris's exported properties
// ***********************
// Server returns the server
func Server ( ) * server . Server {
return DefaultIris . Server ( )
}
// Plugins returns the plugin container
func Plugins ( ) * PluginContainer {
return DefaultIris . Plugins ( )
}
// Config returns the configs
func Config ( ) * config . Iris {
return DefaultIris . Config ( )
}
// Logger returns the logger
func Logger ( ) * logger . Logger {
return DefaultIris . Logger ( )
}
// Rest returns the rest render
func Rest ( ) * rest . Render {
return DefaultIris . Rest ( )
}
// Templates returns the template render
func Templates ( ) * template . Template {
return DefaultIris . Templates ( )
}
// Websocket returns the websocket server
func Websocket ( ) websocket . Server {
return DefaultIris . Websocket ( )
}
2016-06-01 14:29:38 +02:00
// Mail returns the mail sender service
func Mail ( ) mail . Service {
return DefaultIris . Mail ( )
}