2017-06-03 21:18:43 +02:00
# Iris
2016-11-13 21:17:11 +01:00
2017-06-03 21:18:43 +02:00
< p >
Iris is an < b > efficient< / b > and well-designed, < b > cross-platform, web framework< / b > with robust set of < b > features< / b > .< br / > Build your own < b > high-performance< / b > web applications and < b > APIs< / b > powered by unlimited < b > potentials and portability< / b > .< br / >
2017-03-09 00:50:00 +01:00
< a href = "https://travis-ci.org/kataras/iris" > < img src = "https://api.travis-ci.org/kataras/iris.svg?branch=v6&style=flat-square" alt = "Build Status" > < / a >
2017-02-16 22:54:00 +01:00
< a href = "http://goreportcard.com/report/kataras/iris" > < img src = "https://img.shields.io/badge/report%20card%20-a%2B-F44336.svg?style=flat-square" alt = "http://goreportcard.com/report/kataras/iris" > < / a >
2017-03-24 01:51:10 +01:00
< a href = "http://support.iris-go.com" > < img src = "https://img.shields.io/badge/support-page-ec2eb4.svg?style=flat-square" alt = "Iris support forum" > < / a > <!-- <a href="https://github.com/kataras/iris/blob/v6/HISTORY.md"><img src="https://img.shields.io/badge/codename - √Ν εxτ%20 - blue.svg?style=flat - square" alt="CHANGELOG/HISTORY"></a> --> < a href = "https://github.com/kataras/iris/tree/v6/_examples#table-of-contents" > < img src = "https://img.shields.io/badge/examples-%20repository-3362c2.svg?style=flat-square" alt = "Examples for new Gophers" > < / a >
2017-03-20 15:00:42 +01:00
< a href = "https://godoc.org/gopkg.in/kataras/iris.v6" > < img src = "https://img.shields.io/badge/docs-%20reference-5272B4.svg?style=flat-square" alt = "Docs" > < / a >
< a href = "https://kataras.rocket.chat/channel/iris" > < img src = "https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square" alt = "Chat" > < / a >
2017-03-22 04:58:38 +01:00
< a href = "https://github.com/kataras/iris#buy-me-a-cup-of-coffee" > < img src = "https://img.shields.io/badge/support-%20open--source-F4A460.svg?logo=data:image%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAwIDEwMDAiPjxwYXRoIGZpbGw9InJnYigyMjAsMjIwLDIyMCkiIGQ9Ik04ODYuNiwzMDUuM2MtNDUuNywyMDMuMS0xODcsMzEwLjMtNDA5LjYsMzEwLjNoLTc0LjFsLTUxLjUsMzI2LjloLTYybC0zLjIsMjEuMWMtMi4xLDE0LDguNiwyNi40LDIyLjYsMjYuNGgxNTguNWMxOC44LDAsMzQuNy0xMy42LDM3LjctMzIuMmwxLjUtOGwyOS45LTE4OS4zbDEuOS0xMC4zYzIuOS0xOC42LDE4LjktMzIuMiwzNy43LTMyLjJoMjMuNWMxNTMuNSwwLDI3My43LTYyLjQsMzA4LjktMjQyLjdDOTIxLjYsNDA2LjgsOTE2LjcsMzQ4LjYsODg2LjYsMzA1LjN6Ii8%2BPHBhdGggZmlsbD0icmdiKDIyMCwyMjAsMjIwKSIgZD0iTTc5MS45LDgzLjlDNzQ2LjUsMzIuMiw2NjQuNCwxMCw1NTkuNSwxMEgyNTVjLTIxLjQsMC0zOS44LDE1LjUtNDMuMSwzNi44TDg1LDg1MWMtMi41LDE1LjksOS44LDMwLjIsMjUuOCwzMC4ySDI5OWw0Ny4zLTI5OS42bC0xLjUsOS40YzMuMi0yMS4zLDIxLjQtMzYuOCw0Mi45LTM2LjhINDc3YzE3NS41LDAsMzEzLTcxLjIsMzUzLjItMjc3LjVjMS4yLTYuMSwyLjMtMTIuMSwzLjEtMTcuOEM4NDUuMSwxODIuOCw4MzMuMiwxMzAuOCw3OTEuOSw4My45TDc5MS45LDgzLjl6Ii8%2BPC9zdmc%2B" alt = "Buy me a cup of coffee" > < / a >
2017-03-20 15:00:42 +01:00
< / p >
What you say about Iris ✌
-----------
< p >
2017-03-21 01:41:36 +01:00
< a href = "https://medium.com/@kataras/a-url-shortener-service-using-go-iris-and-bolt-4182f0b00ae7" >
2017-03-20 15:06:53 +01:00
< img width = "300" src = "http://iris-go.com/comment28.png" / >
2017-03-20 15:00:42 +01:00
< / a >
< a href = "https://twitter.com/gelnior/status/769100480706379776" >
2017-03-20 15:06:53 +01:00
< img width = "300" src = "http://iris-go.com/comment27.png" / >
2017-03-20 15:00:42 +01:00
< / a >
2016-10-01 09:03:06 +02:00
2017-03-05 23:08:58 +01:00
< br / >
2017-03-20 15:00:42 +01:00
< a href = "https://twitter.com/_mgale/status/818591490305761280" >
2017-03-20 15:06:53 +01:00
< img width = "300" width = "630" src = "http://iris-go.com/comment25.png" / >
2017-03-20 15:00:42 +01:00
< / a >
< a href = "https://twitter.com/MeAlex07/status/822799954188075008" >
2017-03-20 15:06:53 +01:00
< img width = "300" width = "627" src = "http://iris-go.com/comment26.png" / >
2017-03-20 15:00:42 +01:00
< / a >
2017-03-05 23:08:58 +01:00
< br / >
2017-03-20 15:00:42 +01:00
< a href = "https://www.youtube.com/watch?v=jGx0LkuUs4A" >
2017-03-20 15:06:53 +01:00
< img width = "300"
src="https://github.com/iris-contrib/website/raw/gh-pages/assets/gif_link_to_yt.gif" alt="What people say" />
2017-03-20 15:00:42 +01:00
< / a >
< a href = "https://www.youtube.com/watch?v=jGx0LkuUs4A" >
2017-03-20 15:06:53 +01:00
< img width = "300" src = "https://github.com/iris-contrib/website/raw/gh-pages/assets/gif_link_to_yt2.gif" alt = "What people say" / >
2017-03-20 15:00:42 +01:00
< / a >
2017-06-03 21:18:43 +02:00
< br / >
If you're coming from < a href = "https://nodejs.org/en/" > Node.js< / a > world, this is the < a href = "https://github.com/expressjs/express" > expressjs< / a > equivalent for the < a href = "https://golang.org" > Go Programming Language.< / a > < br / >
2017-03-05 23:08:58 +01:00
2017-02-16 17:14:55 +01:00
< / p >
2016-10-01 09:03:06 +02:00
2017-03-20 15:00:42 +01:00
Legends [♡ ](https://github.com/kataras/iris#support )
2017-03-09 00:32:48 +01:00
-----------
2017-03-09 00:50:00 +01:00
2017-03-09 00:32:48 +01:00
[Juan Sebastián Suárez Valencia ](https://github.com/Juanses ) donated 20 EUR at September 11 of 2016
[Bob Lee ](https://github.com/li3p ) donated 20 EUR at September 16 of 2016
[Celso Luiz ](https://github.com/celsosz ) donated 50 EUR at September 29 of 2016
[Ankur Srivastava ](https://github.com/ansrivas ) donated 20 EUR at October 2 of 2016
[Damon Zhao ](https://github.com/se77en ) donated 20 EUR at October 21 of 2016
[exponity - consulting & digital transformation ](https://github.com/exponity ) donated 30 EUR at November 4 of 2016
[Thomas Fritz ](https://github.com/thomasfr ) donated 25 EUR at Jenuary 8 of 2017
[Thanos V. ](http://mykonosbiennale.com/ ) donated 20 EUR at Jenuary 16 of 2017
[George Opritescu ](https://github.com/International ) donated 20 EUR at February 7 of 2017
[Lex Tang ](https://github.com/lexrus ) donated 20 EUR at February 22 of 2017
2017-03-26 07:25:57 +02:00
[Conrad Steenberg ](https://github.com/hengestone ) donated 25 EUR at March 23 of 2017
2017-03-22 04:07:30 +01:00
<!-- ANONYMOUS[*](https://github.com/kataras/iris#support) donated 356 EUR, last anonymous donation at 22 March of 2017
// No o need to show anonymous donations here, the full list is still shown at DONATIONS.md.
-->
2017-03-09 00:32:48 +01:00
2017-03-05 23:08:58 +01:00
Feature Overview
-----------
- Focus on high performance
- Automatically install and serve certificates from https://letsencrypt.org
- Robust routing and middleware ecosystem
- Build RESTful APIs
2017-03-23 23:22:05 +01:00
- Choose your favorite routes' path syntax between [httprouter ](https://github.com/kataras/iris/blob/v6/_examples/beginner/routes-using-httprouter/main.go ) and [gorillamux ](https://github.com/kataras/iris/blob/v6/_examples/beginner/routes-using-gorillamux/main.go )
2017-03-05 23:08:58 +01:00
- Request-Scoped Transactions
- Group API's and subdomains with wildcard support
- Body binding for JSON, XML, Forms, can be extended to use your own custom binders
- More than 50 handy functions to send HTTP responses
- View system: supporting more than 6+ template engines, with prerenders. You can still use your favorite
- Define virtual hosts and (wildcard) subdomains with path level routing
- Graceful shutdown
- Limit request body
- Localization i18N
- Serve static files
- Cache
- Log requests
- Customizable format and output for the logger
- Customizable HTTP errors
- Compression (Gzip)
- Authentication
- OAuth, OAuth2 supporting 27+ popular websites
- JWT
- Basic Authentication
- HTTP Sessions
- Add / Remove trailing slash from the URL with option to redirect
- Redirect requests
- HTTP to HTTPS
- HTTP to HTTPS WWW
- HTTP to HTTPS non WWW
- Non WWW to WWW
- WWW to non WWW
- Highly scalable rich content render (Markdown, JSON, JSONP, XML...)
2017-03-09 00:50:00 +01:00
- Websocket-only API similar to socket.io
2017-03-05 23:08:58 +01:00
- Hot Reload on source code changes
- Typescript integration + Web IDE
- Checks for updates at startup
- Highly customizable
- Feels like you used iris forever, thanks to its Fluent API
- And many others...
2017-02-05 19:26:40 +01:00
2017-03-28 06:53:57 +02:00
Table of Contents
-----------
2017-03-28 07:04:31 +02:00
< a href = "https://github.com/kataras/iris/tree/v6/_examples#table-of-contents" > < img align = "right" width = "265" src = "https://raw.githubusercontent.com/iris-contrib/website/gh-pages/assets/book/cover_4.jpg" > < / a >
2017-03-28 06:53:57 +02:00
* [Level: Beginner ](_examples/beginner )
* [Hello World ](_examples/beginner/hello-world/main.go )
* [Routes (using httprouter) ](_examples/beginner/routes-using-httprouter/main.go )
* [Routes (using gorillamux) ](_examples/beginner/routes-using-gorillamux/main.go )
* [Internal Application File Logger ](_examples/beginner/file-logger/main.go )
* [Write JSON ](_examples/beginner/write-json/main.go )
* [Read JSON ](_examples/beginner/read-json/main.go )
* [Read Form ](_examples/beginner/read-form/main.go )
* [Favicon ](_examples/beginner/favicon/main.go )
* [File Server ](_examples/beginner/file-server/main.go )
* [Send Files ](_examples/beginner/send-files/main.go )
* [Stream Writer ](_examples/beginner/stream-writer/main.go )
* [Listen UNIX Socket ](_examples/beginner/listen-unix/main.go )
* [Listen TLS ](_examples/beginner/listen-tls/main.go )
* [Listen Letsencrypt (Automatic Certifications) ](_examples/beginner/listen-letsencrypt/main.go )
* [Level: Intermediate ](_examples/intermediate )
* [Send An E-mail ](_examples/intermediate/e-mail/main.go )
* [Upload/Read Files ](_examples/intermediate/upload-files/main.go )
* [Request Logger ](_examples/intermediate/request-logger/main.go )
* [Profiling (pprof) ](_examples/intermediate/pprof/main.go )
* [Basic Authentication ](_examples/intermediate/basicauth/main.go )
* [HTTP Access Control ](_examples/intermediate/cors/main.go )
* [Cache Markdown ](_examples/intermediate/cache-markdown/main.go )
* [Localization and Internationalization ](_examples/intermediate/i18n/main.go )
* [Recovery ](_examples/intermediate/recover/main.go )
* [Graceful Shutdown ](_examples/intermediate/graceful-shutdown/main.go )
* [Custom TCP Listener ](_examples/intermediate/custom-listener/main.go )
* [Custom HTTP Server ](_examples/intermediate/custom-httpserver/main.go )
* [View Engine ](_examples/intermediate/view )
* [Overview ](_examples/intermediate/view/overview/main.go )
* [Template HTML: Part Zero ](_examples/intermediate/view/template_html_0/main.go )
* [Template HTML: Part One ](_examples/intermediate/view/template_html_1/main.go )
* [Template HTML: Part Two ](_examples/intermediate/view/template_html_2/main.go )
* [Template HTML: Part Three ](_examples/intermediate/view/template_html_3/main.go )
* [Template HTML: Part Four ](_examples/intermediate/view/template_html_4/main.go )
* [Inject Data Between Handlers ](_examples/intermediate/view/context-view-data/main.go )
2017-03-28 07:04:31 +02:00
* [Embedding Templates Into Executable ](_examples/intermediate/view/embedding-templates-into-app )
2017-03-28 06:53:57 +02:00
* [Custom Renderer ](_examples/intermediate/view/custom-renderer/main.go )
* [Password Hashing ](_examples/intermediate/password-hashing/main.go )
* [Sessions ](_examples/intermediate/sessions )
* [Overview ](_examples/intermediate/sessions/overview/main.go )
* [Encoding & Decoding the Session ID: Secure Cookie ](_examples/intermediate/sessions/securecookie/main.go )
* [Standalone ](_examples/intermediate/sessions/standalone/main.go )
* [With A Back-End Database ](_examples/intermediate/sessions/database/main.go )
* [Flash Messages ](_examples/intermediate/flash-messages/main.go )
* [Websockets ](_examples/intermediate/websockets )
* [Ridiculous Simple ](_examples/intermediate/websockets/ridiculous-simple/main.go )
* [Overview ](_examples/intermediate/websockets/overview/main.go )
* [Connection List ](_examples/intermediate/websockets/connectionlist/main.go )
* [Native Messages ](_examples/intermediate/websockets/naive-messages/main.go )
* [Secure ](_examples/intermediate/websockets/secure/main.go )
* [Custom Go Client ](_examples/intermediate/websockets/custom-go-client/main.go )
* [Level: Advanced ](_examples/advanced )
* [Transactions ](_examples/advanced/transactions/main.go )
* [HTTP Testing ](_examples/advanced/httptest/main_test.go )
* [Watch & Compile Typescript source files ](_examples/advanced/typescript/main.go )
* [Cloud Editor ](_examples/advanced/cloud-editor/main.go )
* [Online Visitors ](_examples/advanced/online-visitors/main.go )
* [URL Shortener using BoltDB ](_examples/advanced/url-shortener/main.go )
* [Subdomains ](_examples/advanced/subdomains )
* [Single ](_examples/advanced/subdomains/single/main.go )
* [Multi ](_examples/advanced/subdomains/multi/main.go )
* [Wildcard ](_examples/advanced/subdomains/wildcard/main.go )
2017-01-25 21:19:06 +01:00
Installation
2016-12-14 10:57:07 +01:00
-----------
2016-10-01 09:03:06 +02:00
2017-02-17 06:15:32 +01:00
The only requirement is the [Go Programming Language ](https://golang.org/dl/ ), at least 1.8
2016-09-18 12:31:53 +02:00
2017-02-23 12:56:59 +01:00
```sh
2017-02-14 04:54:11 +01:00
$ go get gopkg.in/kataras/iris.v6
2016-10-02 13:59:04 +02:00
```
2017-01-28 10:38:20 +01:00
Overview
-----------
```go
package main
import (
2017-02-14 04:54:11 +01:00
"gopkg.in/kataras/iris.v6"
2017-02-23 12:56:59 +01:00
"gopkg.in/kataras/iris.v6/adaptors/cors"
2017-02-17 00:34:45 +01:00
"gopkg.in/kataras/iris.v6/adaptors/httprouter"
2017-02-23 12:56:59 +01:00
"gopkg.in/kataras/iris.v6/adaptors/view"
2017-01-30 11:35:43 +01:00
)
2017-01-28 10:38:20 +01:00
2017-02-05 19:26:40 +01:00
func main() {
2017-02-23 12:56:59 +01:00
// Receives optional iris.Configuration{}, see ./configuration.go
// for more.
2017-02-05 19:26:40 +01:00
app := iris.New()
2017-02-23 12:56:59 +01:00
// Order doesn't matter,
// You can split it to different .Adapt calls.
// See ./adaptors folder for more.
app.Adapt(
// adapt a logger which prints all errors to the os.Stdout
iris.DevLogger(),
// adapt the adaptors/httprouter or adaptors/gorillamux
httprouter.New(),
// 5 template engines are supported out-of-the-box:
//
// - standard html/template
// - amber
// - django
// - handlebars
// - pug(jade)
//
// Use the html standard engine for all files inside "./views" folder with extension ".html"
view.HTML("./views", ".html"),
// Cors wrapper to the entire application, allow all origins.
cors.New(cors.Options{AllowedOrigins: []string{"*"}}))
// http://localhost:6300
2017-02-05 19:26:40 +01:00
// Method: "GET"
// Render ./views/index.html
app.Get("/", func(ctx *iris.Context) {
2017-02-23 12:56:59 +01:00
ctx.Render("index.html", iris.Map{"Title": "Page Title"}, iris.RenderOptions{"gzip": true})
2017-02-05 19:26:40 +01:00
})
// Group routes, optionally: share middleware, template layout and custom http errors.
userAPI := app.Party("/users", userAPIMiddleware).
Layout("layouts/userLayout.html")
{
// Fire userNotFoundHandler when Not Found
2017-02-23 12:56:59 +01:00
// inside http://localhost:6300/users/*anything
2017-02-05 19:26:40 +01:00
userAPI.OnError(404, userNotFoundHandler)
2017-02-23 12:56:59 +01:00
// http://localhost:6300/users
2017-02-05 19:26:40 +01:00
// Method: "GET"
userAPI.Get("/", getAllHandler)
2017-02-23 12:56:59 +01:00
// http://localhost:6300/users/42
2017-02-05 19:26:40 +01:00
// Method: "GET"
userAPI.Get("/:id", getByIDHandler)
2017-02-23 12:56:59 +01:00
// http://localhost:6300/users
2017-02-05 19:26:40 +01:00
// Method: "POST"
userAPI.Post("/", saveUserHandler)
}
2017-02-23 12:56:59 +01:00
// Start the server at 127.0.0.1:6300
app.Listen(":6300")
}
func userAPIMiddleware(ctx *iris.Context) {
// your code here...
println("Request: " + ctx.Path())
ctx.Next() // go to the next handler(s)
}
func userNotFoundHandler(ctx *iris.Context) {
// your code here...
ctx.HTML(iris.StatusNotFound, "< h1 > User page not found < / h1 > ")
}
func getAllHandler(ctx *iris.Context) {
// your code here...
2017-01-28 10:38:20 +01:00
}
2017-02-05 19:26:40 +01:00
func getByIDHandler(ctx *iris.Context) {
// take the :id from the path, parse to integer
// and set it to the new userID local variable.
userID, _ := ctx.ParamInt("id")
// userRepo, imaginary database service < - your only job .
user := userRepo.GetByID(userID)
// send back a response to the client,
// .JSON: content type as application/json; charset="utf-8"
// iris.StatusOK: with 200 http status code.
//
// send user as it is or make use of any json valid golang type,
// like the iris.Map{"username" : user.Username}.
ctx.JSON(iris.StatusOK, user)
}
2017-02-23 12:56:59 +01:00
func saveUserHandler(ctx *iris.Context) {
// your code here...
}
2017-01-28 10:38:20 +01:00
```
2017-02-05 19:26:40 +01:00
2017-02-23 12:56:59 +01:00
### Reload on source code changes
2017-01-28 10:38:20 +01:00
2017-02-23 12:56:59 +01:00
```sh
$ go get -u github.com/kataras/rizla
$ cd $GOPATH/src/mywebapp
2017-03-03 04:10:56 +01:00
$ rizla main.go
2017-02-23 12:56:59 +01:00
```
### Reload templates on each incoming request
```go
app.Adapt(view.HTML("./views", ".html").Reload(true))
```
2017-02-18 15:36:42 +01:00
2017-03-20 15:00:42 +01:00
FAQ & Documentation
-----------
2017-03-24 01:51:10 +01:00
< a href = "https://github.com/kataras/iris/tree/v6/_examples#table-of-contents" > < img align = "right" width = "125" src = "https://raw.githubusercontent.com/iris-contrib/website/gh-pages/assets/book/cover_4.jpg" > < / a >
2017-03-20 15:00:42 +01:00
2017-03-20 15:33:59 +01:00
1. [Getting Started with Go+Iris ](http://gopherbook.iris-go.com )
2017-03-20 15:00:42 +01:00
2017-03-24 01:51:10 +01:00
2. Official small but practical [examples ](https://github.com/kataras/iris/tree/v6/_examples#table-of-contents )
2017-03-20 15:00:42 +01:00
2017-03-20 15:33:59 +01:00
3. Navigate through [community examples ](https://github.com/iris-contrib/examples ) too
2017-03-20 15:00:42 +01:00
2017-03-21 01:41:36 +01:00
4. [Creating A URL Shortener Service Using Go, Iris, and Bolt ](https://medium.com/@kataras/a-url-shortener-service-using-go-iris-and-bolt-4182f0b00ae7 )
2017-03-20 15:00:42 +01:00
2017-03-23 23:22:05 +01:00
5. [Godocs ](https://godoc.org/gopkg.in/kataras/iris.v6 ) for deep documentation
2017-03-20 15:00:42 +01:00
2017-03-23 23:22:05 +01:00
6. [HISTORY.md ](https://github.com//kataras/iris/tree/v6/HISTORY.md ) is your best friend, version migrations are released there
2017-03-20 15:00:42 +01:00
I'll be glad to talk with you about **your awesome feature requests** ,
open a new [discussion ](http://support.iris-go.com ), you will be heard!
Support
------------
2017-03-20 15:33:59 +01:00
- :star: [the project ](https://github.com/kataras/iris/stargazers ), will help you to follow the upcoming features
- [Donate ](https://github.com/kataras/iris#buy-me-a-cup-of-coffee ), will help me to continue
- [Post ](http://support.iris-go.com ) a feature request or report a bug, will help all of us to build a better web, together
- :earth_americas: post [an article ](https://dzone.com/articles/a-url-shortener-service-using-go-iris-and-bolt-ger ) or [tweet ](https://twitter.com/gelnior/status/769100480706379776 ) and share it with your neighbor
2017-03-20 15:00:42 +01:00
Buy me a cup of coffee?
------------
Iris is free and open source but developing it has taken thousands of hours of my time and a large part of my sanity. If you feel this web framework useful to you, it would go a great way to ensuring that I can afford to take the time to continue to develop it.
I spend all my time in the construction of Iris, therefore I have no income value.
Feel free to send **any** amount through paypal
2017-03-22 04:07:30 +01:00
[![ ](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif )](https://www.paypal.com/cgi-bin/webscr?cmd=_donations& business=kataras2006%40hotmail%2ecom& lc=GR& item_name=Iris%20web%20framework& item_number=iriswebframeworkdonationid2016& currency_code=EUR& bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted)
2017-03-20 15:00:42 +01:00
> Please check your e-mail after your donation.
Thanks for your gratitude and finance help ♡
2017-02-23 13:19:43 +01:00
Third Party Middleware
------------
2017-02-18 15:23:17 +01:00
2017-02-23 13:19:43 +01:00
Iris has its own middleware form of `func(ctx *iris.Context)` but it's also compatible with all `net/http` middleware forms using [iris.ToHandler ](https://github.com/iris-contrib/middleware/blob/master/cors/cors.go#L33 ), i.e Negroni's middleware form of `func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc)` .
2017-03-20 15:33:59 +01:00
Here is a small list of Iris compatible middleware, I'm sure you can find more:
2017-02-23 13:19:43 +01:00
| Middleware | Author | Description |
| -----------|--------|-------------|
| [binding ](https://github.com/mholt/binding ) | [Matt Holt ](https://github.com/mholt ) | Data binding from HTTP requests into structs |
| [cloudwatch ](https://github.com/cvillecsteele/negroni-cloudwatch ) | [Colin Steele ](https://github.com/cvillecsteele ) | AWS cloudwatch metrics middleware |
| [csp ](https://github.com/awakenetworks/csp ) | [Awake Networks ](https://github.com/awakenetworks ) | [Content Security Policy ](https://www.w3.org/TR/CSP2/ ) (CSP) support |
| [delay ](https://github.com/jeffbmartinez/delay ) | [Jeff Martinez ](https://github.com/jeffbmartinez ) | Add delays/latency to endpoints. Useful when testing effects of high latency |
| [New Relic Go Agent ](https://github.com/yadvendar/negroni-newrelic-go-agent ) | [Yadvendar Champawat ](https://github.com/yadvendar ) | Official [New Relic Go Agent ](https://github.com/newrelic/go-agent ) (currently in beta) |
| [gorelic ](https://github.com/jingweno/negroni-gorelic ) | [Jingwen Owen Ou ](https://github.com/jingweno ) | New Relic agent for Go runtime |
| [JWT Middleware ](https://github.com/auth0/go-jwt-middleware ) | [Auth0 ](https://github.com/auth0 ) | Middleware checks for a JWT on the `Authorization` header on incoming requests and decodes it|
| [logrus ](https://github.com/meatballhat/negroni-logrus ) | [Dan Buch ](https://github.com/meatballhat ) | Logrus-based logger |
| [onthefly ](https://github.com/xyproto/onthefly ) | [Alexander Rødseth ](https://github.com/xyproto ) | Generate TinySVG, HTML and CSS on the fly |
| [permissions2 ](https://github.com/xyproto/permissions2 ) | [Alexander Rødseth ](https://github.com/xyproto ) | Cookies, users and permissions |
| [prometheus ](https://github.com/zbindenren/negroni-prometheus ) | [Rene Zbinden ](https://github.com/zbindenren ) | Easily create metrics endpoint for the [prometheus ](http://prometheus.io ) instrumentation tool |
| [render ](https://github.com/unrolled/render ) | [Cory Jacobsen ](https://github.com/unrolled ) | Render JSON, XML and HTML templates |
| [RestGate ](https://github.com/pjebs/restgate ) | [Prasanga Siripala ](https://github.com/pjebs ) | Secure authentication for REST API endpoints |
| [secure ](https://github.com/unrolled/secure ) | [Cory Jacobsen ](https://github.com/unrolled ) | Middleware that implements a few quick security wins |
| [stats ](https://github.com/thoas/stats ) | [Florent Messa ](https://github.com/thoas ) | Store information about your web application (response time, etc.) |
| [VanGoH ](https://github.com/auroratechnologies/vangoh ) | [Taylor Wrobel ](https://github.com/twrobel3 ) | Configurable [AWS-Style ](http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html ) HMAC authentication middleware |
| [xrequestid ](https://github.com/pilu/xrequestid ) | [Andrea Franz ](https://github.com/pilu ) | Middleware that assigns a random X-Request-Id header to each request |
| [digits ](https://github.com/bamarni/digits ) | [Bilal Amarni ](https://github.com/bamarni ) | Middleware that handles [Twitter Digits ](https://get.digits.com/ ) authentication |
2017-02-18 15:23:17 +01:00
2017-03-20 15:33:59 +01:00
Feel free to put up a [PR ](https://github.com/iris-contrib/middleware ) your middleware!
2017-02-18 15:23:17 +01:00
2017-01-25 21:19:06 +01:00
Testing
2016-10-02 13:59:04 +02:00
------------
2017-02-24 13:17:43 +01:00
The `httptest` package is a simple Iris helper for the httpexpect, a new library for End-to-end HTTP and REST API testing for Go.
You can find tests by navigating to the source code,
i.e:
- [context_test.go ](https://github.com/kataras/iris/blob/v6/context_test.go )
- [handler_test.go ](https://github.com/kataras/iris/blob/v6/handler_test.go )
- [policy_gorillamux_test.go ](https://github.com/kataras/iris/blob/v6/policy_gorillamux_test.go )
- [policy_httprouter_test.go ](https://github.com/kataras/iris/blob/v6/policy_httprouter_test.go )
- [policy_nativerouter_test.go ](https://github.com/kataras/iris/blob/v6/policy_nativerouter_test.go )
2017-03-20 15:00:42 +01:00
- [policy_routerwrapper_test.go ](https://github.com/kataras/iris/blob/v6/policy_routerwrapper_test.go )
2017-02-24 13:17:43 +01:00
- [policy_sessions_test.go ](https://github.com/kataras/iris/blob/v6/policy_sessions_test.go )
- [response_writer_test.go ](https://github.com/kataras/iris/blob/v6/response_writer_test.go )
- [route_test.go ](https://github.com/kataras/iris/blob/v6/route_test.go )
- [status_test.go ](https://github.com/kataras/iris/blob/v6/status_test.go )
- [transaction_test.go ](https://github.com/kataras/iris/blob/v6/transaction_test.go )
2017-03-20 15:00:42 +01:00
- [serializer_test.go ](https://github.com/kataras/iris/blob/v6/serializer_test.go )
2016-10-02 13:59:04 +02:00
2017-03-23 23:22:05 +01:00
A simple test is located to [./_examples/advanced/httptest/main_test.go ](https://github.com/kataras/iris/blob/v6/_examples/advanced/httptest/main_test.go )
2017-02-17 10:08:40 +01:00
2016-05-30 16:08:09 +02:00
Philosophy
------------
2016-10-02 23:10:33 +02:00
The Iris philosophy is to provide robust tooling for HTTP, making it a great solution for single page applications, web sites, hybrids, or public HTTP APIs. Keep note that, today, iris is faster than nginx itself.
2016-05-30 16:08:09 +02:00
2017-03-23 23:22:05 +01:00
Iris does not force you to use any specific ORM or template engine. Iris is routerless which means you can adapt any router you like, [httprouter ](https://github.com/kataras/iris/blob/v6/_examples/beginner/routes-using-httprouter/main.go ) is the fastest, [gorillamux ](https://github.com/kataras/iris/blob/v6/_examples/beginner/routes-using-gorillamux/main.go ) has more features. With support for the most used template engines (5), you can quickly craft the perfect application.
2016-05-30 16:08:09 +02:00
2016-07-01 00:34:44 +02:00
2017-03-09 00:50:00 +01:00
People
2016-05-30 16:08:09 +02:00
------------
2016-06-16 04:24:01 +02:00
2016-10-21 02:06:50 +02:00
The author of Iris is [@kataras ](https://github.com/kataras ).
2017-03-09 00:32:48 +01:00
However the real Success of Iris belongs to you with your bug reports and feature requests that made this Framework so Unique.
2017-03-20 15:33:59 +01:00
Contact
2016-12-13 07:41:30 +01:00
------------
2017-03-05 01:42:28 +01:00
Besides the fact that we have a [community chat][Chat] for questions or reports and ideas, [stackoverflow ](http://stackoverflow.com/ ) section for generic go+iris questions and the [iris support ](http://support.iris-go.com ) for bug reports and feature requests, you can also contact with me, as a person who is always open to help you:
2016-12-13 07:41:30 +01:00
- [Twitter ](https://twitter.com/MakisMaropoulos )
- [Facebook ](https://facebook.com/kataras.gopher )
2017-01-26 08:50:26 +01:00
- [Linkedin ](https://www.linkedin.com/in/gerasimos-maropoulos )
2016-12-13 07:41:30 +01:00
2017-01-25 21:19:06 +01:00
2017-03-20 15:33:59 +01:00
Codename: ["√Ν εxτ" ](https://github.com/kataras/iris/blob/v6/HISTORY.md )
2017-01-25 21:19:06 +01:00
------------
2016-12-13 07:41:30 +01:00
License
------------
2017-01-25 21:19:06 +01:00
Unless otherwise noted, the source files are distributed
2017-01-02 20:20:17 +01:00
under the MIT License found in the [LICENSE file ](LICENSE ).
2016-12-13 07:41:30 +01:00
2017-02-14 04:54:11 +01:00
Note that some optional components that you may use with Iris requires
different license agreements.
2017-02-18 15:36:42 +01:00
2016-07-03 16:21:57 +02:00
[Chat]: https://kataras.rocket.chat/channel/iris