Novidades

> 🚀 **O Iris v14 está a caminho.** A próxima versão principal é o maior lançamento da história do projeto: o framework reconstruído sobre os genéricos do Go, um construtor de aplicação verificado pelo compilador, auxiliares de requisição que validam por você, um mapa central de erros, trinta middlewares incluídos e um livro dentro do próprio repositório. Veja [o que vem no Iris v14](#-o-que-vem-no-iris-v14) mais abaixo. > > A versão descrita aqui, a **v12**, continua funcionando e continua recebendo correções. A v14 chega em um novo caminho de importação, então nada do seu lado quebra no dia em que ela sair. # Iris Web Framework English العربية [![build status](https://img.shields.io/github/actions/workflow/status/kataras/iris/ci.yml?branch=main&style=for-the-badge)](https://github.com/kataras/iris/actions/workflows/ci.yml) [![view examples](https://img.shields.io/badge/examples%20-285-a83adf.svg?style=for-the-badge&logo=go)](https://github.com/kataras/iris/tree/main/_examples) [![chat](https://img.shields.io/gitter/room/iris_go/community.svg?color=cc2b5e&logo=gitter&style=for-the-badge)](https://gitter.im/iris_go/community) [![donate](https://img.shields.io/badge/support-Iris-blue.svg?style=for-the-badge&logo=paypal)](https://iris-go.com/donate) ⚡ Iris é um framework web rápido, simples, mas completo e muito eficiente para Go. ✨ Ele fornece uma base lindamente expressiva e fácil de usar para seu próximo site ou API. 🌟 Veja o que [outras pessoas dizem sobre o Iris](https://www.iris-go.com/#review) e dê uma **[estrela](https://github.com/kataras/iris/stargazers)** a este projeto de código aberto [![](https://iris-go.com/static/images/reviews.gif)](https://iris-go.com/testimonials/) [![Benchmarks: Jul 18, 2020 at 10:46am (UTC)](https://iris-go.com/static/images/benchmarks.svg)](https://github.com/kataras/server-benchmarks) ```go package main import "github.com/kataras/iris/v12" func main() { app := iris.New() app.Use(iris.Compression) app.Get("/", func(ctx iris.Context) { ctx.HTML("Hello %s!", "World") }) app.Listen(":8080") } ``` Como disse certa vez um [desenvolvedor Go](https://twitter.com/dkuye/status/1532087942696554497), **o Iris cobre você por todos os lados e segue firme com o passar dos anos** ⭐ Alguns dos recursos que o Iris oferece: * HTTP/2 (Push, inclusive dados embutidos) * Middleware (Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite) * Versionamento de API * Model-View-Controller * Websockets * gRPC * Auto-HTTPS * Suporte nativo ao ngrok, a forma mais rápida de colocar sua aplicação na internet * Router único com caminhos dinâmicos como parâmetro, com tipos padrão como :uuid, :string, :int... e a possibilidade de criar os seus * Compressão * Motores de view (HTML, Django, Handlebars, Pug/Jade e mais) * Crie seu próprio File Server e hospede seu próprio servidor WebDAV * Cache * Localização (i18n, sitemap) * Sessões * Respostas ricas (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events e mais) * Compressão de resposta (gzip, deflate, brotli, snappy, s2) * Requisições ricas (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack e mais) * Injeção de dependência (MVC, Handlers, API Routers) * Suíte de testes * E o mais importante... você recebe respostas rápidas e suporte, desde o primeiro dia até hoje ## 🚀 O que vem no Iris v14 O Iris v14 é o maior lançamento da história do projeto. Ele reconstrói o framework sobre os genéricos do Go e muda a forma como uma aplicação é montada: menos fiação no `main`, handlers mais curtos e um único lugar para as decisões que antes ficavam espalhadas por cada rota. Nada disso exige sua atenção hoje. A v12 continua funcionando, continua recebendo correções, e a v14 chega com um guia de migração que cobre cada API renomeada ou removida. ### A aplicação inteira em uma cadeia verificada pelo compilador `iris.NewBuilder` conecta CORS, compressão, log de acesso, o endpoint de saúde, o mapa de erros, seus serviços e seus grupos de API em uma única expressão. O compilador impõe a ordem das etapas, então uma aplicação ou compila corretamente ou não compila de jeito nenhum. ```go iris.NewBuilder(). Prefix("/api"). AllowOrigin("*"). Compression(true). LogRequests(true). Health(true, "production", "kataras"). Errors(errors.NewOptions(). MapErrors(errors.NotFound, catalog.ErrNotFound)). Services(catalog.NewRepository, catalog.NewService). API("/products", api.NewProductsAPI). Build(). Listen(":8080") ``` ### Os handlers param de se repetir Decodificação, validação e renderização de erro saem do corpo do handler. `rest.ReadJSON[T]` decodifica a requisição, executa o método `Validate() error` do seu tipo quando ele existe, e escreve o 400 sozinho. Os auxiliares de resposta escrevem o status de sucesso, ou o que o seu mapa central disser que aquele erro deve retornar. ```go func (api *ProductsAPI) create(ctx iris.Context) { input, ok := rest.ReadJSON[catalog.ProductInput](ctx) if !ok { return // 400 já escrito: JSON malformado ou Validate reprovado. } id, err := api.svc.Create(ctx, input) rest.Created(ctx, id, err) // 201, ou o erro mapeado centralmente. } ``` `rest.OK`, `rest.NoContent`, `rest.Count` e `rest.Paginated` cobrem os demais formatos que uma API devolve. ### Os erros são declarados uma única vez O novo pacote `rest/errors` guarda o mapeamento dos erros do seu domínio para respostas HTTP. Os clientes recebem payloads canônicos e legíveis por máquina. Mensagens internas ficam internas. Registre um coletor e cada falha chega ao seu logger ou ao seu banco de dados a partir de um único lugar. Um erro pode ser renderizado como JSON ou como view, dependendo do que o cliente pediu. ### Injeção de dependência em todo lugar, não só no MVC Os construtores declaram o que precisam e o contêiner fornece: para handlers, para grupos de API, para controladores. Um serviço que implementa `Init(ctx context.Context) error` roda uma vez dentro de `Build()`. Tudo que pode ser fechado é fechado no desligamento. O pacote `hero` acabou, substituído por `dep` e `rest`, que fazem mais com menos linhas. Os controladores MVC são construídos sobre genéricos. ### Os pacotes estão onde você esperaria `sessions`, `cache`, `websocket`, `i18n`, `view` e `versioning` viraram middleware. `mvc` foi para dentro de `controller`, ao lado dos novos controladores `fileserver`, `sitemap` e `apigraph`. O `apigraph` desenha a sua árvore de rotas como um grafo D3 interativo. Trinta middlewares vêm de fábrica, incluindo os novos: `httpcost` (tempo, memória e CPU por requisição, para análise de desempenho ou cobrança), `bodylimit`, `compress`, `counter`, `referrer`, `geolocation`, `ipaccess` e `servertiming`. As implementações dos motores de view foram para [iris-contrib/views](https://github.com/iris-contrib/views). ### A configuração é um literal parcial `iris.Configuration` e os configuradores `With*` foram substituídos por `iris.Options`. Defina os campos que importam para você e o resto vem dos padrões. `Bind` carrega YAML da variável de ambiente `SERVER_CONFIG` e depois de um arquivo. ```go app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"}) ``` ### Nomes que dizem o que fazem Ler um cabeçalho de requisição e definir um de resposta não compartilham mais um prefixo que inverte de sentido em silêncio: `ctx.Header` lê a requisição, enquanto `ctx.SetHeader` e `ctx.ResponseHeader` atuam na resposta. `Party` agora é `Router`. `ctx.URLParam` agora é `ctx.Query().Get`. Cada renomeação está no guia de migração junto do seu substituto, e a maioria é um localizar e substituir. ### Seguro por padrão Os cookies de sessão vêm com `Secure` e `SameSite=Lax`. O limite do corpo da requisição é aplicado em todos os caminhos de leitura. Junto com a reconstrução caíram bugs antigos, entre eles um limitador de taxa que registrava os limites sem nunca aplicá-los e uma chamada a `Logout` capaz de derrubar o processo inteiro. ### Documentação que dá para ler do começo ao fim A v14 vem com um livro de 23 capítulos dentro do repositório, um tutorial inicial que constrói uma API REST com testes em um único documento, um guia de migração para aplicações v12, e um wiki de IA ao vivo gerado a partir do código-fonte que responde perguntas sobre a base de código. ### O que isso significa para o seu código v12 O caminho de importação passa a ser `github.com/kataras/iris/v14`, então v12 e v14 podem conviver e nada quebra no dia do lançamento. Atualize quando for conveniente. O guia de migração cobre o caminho de importação, a mudança dos pacotes, cada API removida e seu substituto, e as mudanças de comportamento, com comandos prontos para as partes mecânicas. Ainda não há data pública de lançamento. Acompanhe os [releases](https://github.com/kataras/iris/releases) ou siga [@iris_framework](https://twitter.com/iris_framework) para saber primeiro. ## 👑 Apoiadores Com a sua ajuda, podemos melhorar o desenvolvimento web de código aberto para todo mundo!

getsentry github lensesio thepunterbot h4rdc0m draFWM gf3 trading-peter AlbinoGeek basilarchia sumjoe simpleittools xiaozhuai Remydeme celsosz linxcoder jnelle TechMaster janwebdev altafino jakoubek alekperos day0ng hengestone thomasfr code-chimp CetinBasoz International Juanses SometimesMage ansrivas boreevyuri brentwilson camilbinas ekobayong lexrus li3p madhu72 mosorize se77en tstangenberg vincent-li DavidShaw sascha11110 clichi2002 derReineke Sirisap22 primadi agoncecelia chrisliang12 zyu hobysmith pluja antonio-pedrazzini clacroix njeff3 ixalender mubariz-ahmed Cesar th31nitiate stgrosshh Didainius DmarshalTU IwateKyle Little-YangYang Major2828 MatejLach amritpal042 andrefiorot boomhut cshum dtrifonov gadokrisztian geordee guanting112 iantuan ichenhe rodrigoghm icibiri jewe11er jfloresremar jingtianfeng kilarusravankumar leandrobraga lfbos lpintes macropas marcmmx mark2b miguel-devs mihado mmckeen75 narven odas0r olaf-lexemo pitexplore pr123 rsousacode sankethpb wixregiga GeorgeFourikis saz59 shadowfiga siriushaha skurtz97 srinivasganti syrm tuhao1020 BlackHole1 L-M-Sherlock claudemuller keymanye wahyuief xuyan2018 xvalen xytis ElNovi IpastorSan KKP4 Lernakow ernestocolombo francisstephan pixelheresy rcapraro soiestad spkarason thanasolykos ukitzmann DanielKirkwood colinf simonproctor FernandoLangOFC Firdavs9512 Flammable-Duck Gepetdo Hongjian0619 JoeD Jude-X Kartoffelbot KevinZhouRafael KrishManohar Laotanling Longf99999 Lyansun MihaiPopescu1985 TBNilles ajanicij aprinslo1 Mohammed8960 NA Neulhan kyoukhana spazzymoto victorgrey ArishSultan ehayun kukaki oshirokazuhide t6tg 15189573255 AGPDev AnatolyUA AwsIT NguyenPhuoc Oka00 PaddyFrenchman RainerGevers Ramblestsad SamuelNeves Scorpio69t Serissa4000 TianJIANG Ubun1 WangYajun39 XinYoungCN YukinaMochizuki a112121788 acdias aeonsthorn agent3bood ajb-neodynamics-io alessandromarotta algobot76 algoflows angelaahhu anhxuanpham annieruci antoniejiao artman328 b2cbd baoch254 bastengao beytullahakyuz bjoroen blackHoleNgc1277 bunnycodego carlos-enginner centratelemedia chrismalek civicwar cnzhangquan cuong48d damiensy danlanxiaohei dextercai dfaugusto dkzhang dloprodu donam-givita dph0899 dvitale ec0629 edwindna2 ekiyooka ekofedriyanto eli-yip eljefedelrodeodeljefe fenriz07 ffelipelimao frenchmajesty gastropulgite geGao123 globalflea gloudx gnosthi gogoswift goten002 guanzi008 hdezoscar93 hieungm hieunmg homerious hzxd inyellowbus iuliancarnaru iysaleh jackptoke jackysywk jeff2go jeremiahyan joelywz kamolcu kana99 edsongley katsubushiken kattaprasanth keeio keval6706 khasanovrs kkdaypenny knavels kohakuhubo korowiov kostasvk lafayetteDan lbsubash leki75 lemuelroberto liheyuan lingyingtan linuxluigi lipatti maikelcoke marek-kuticka marman-hp mattbowen maxgozou maxgozzz mitas mizzlespot mkell43 mnievesco mo3lyana motogo mtrense mukunhao mulyawansentosa nasoma ngseiyu nikharsaxena nronzel odelanno onlysumitg xPoppa yesudeep ymonk yonson2 yshengliao ytxmobile98 yusong-offx zhenggangpku zou8944 SergeShin - BelmonduS Diewald cty4ka martinjanda evan hazmi-e205 jtgoral ky2s lauweliam ozfive paulcockrell paulxu21 pesquive petros9282 phil535 pitt134 poscard qiepeipei qiuzhanghua rapita rbondi relaera remopavithran rfunix rhernandez-itemsoft rikoriswandha risallaw robivictor rubiagatra rubyangxg rxrw saleebm sbenimeli sebyno seun-otosho shobhitsinghal77 solohiroshi su1gen sukiejosh suresh16671 svirmi terjelafton thiennguyen93 unixedia vadgun valsorym vguhesan vpiduri vrocadev vuhoanglam walter-wang martinlindhe mdamschen letmestudy michaelsmanley Curtman SridarDhandapani madrigaltenor opusmagna ShahramMebashar b4zz4r bobmcallan fangli galois-tnp mblandr midhubalan netbaalzovf oliverjosefzimmer peacememories talebisinan valkuere lfaynman ArturWierzbicki aaxx crashCoder derekslenk dochoaj evillgenius75 gog200921 mauricedcastro mwiater sj671 statik supersherm5 thejones CSRaghunandan ndimorle rosales-stephanie shyyawn vcruzato wangbl11 wofka72 geoshan juanxme nguyentamvinhlong yoru74 xsokev oleang michalsz pomland-94 tejzpr theantichris tuxaanand raphael-brand willypuzzle dmcbane malcolm-white-dti HieuLsw carlosmoran092 yangxianglong

## 📖 Aprendendo Iris ### Instalação O único requisito é a [linguagem de programação Go](https://go.dev/dl/). #### Criar um novo projeto ```sh $ mkdir myapp $ cd myapp $ go mod init myapp $ go get github.com/kataras/iris/v12@latest # ou @v12.2.11 ```
Instalar em um projeto existente ```sh $ cd myapp $ go get github.com/kataras/iris/v12@latest ``` **Executar** ```sh $ go mod tidy -compat=1.23 # -compat="1.23" no windows. $ go run . ```
![](https://www.iris-go.com/images/gifs/install-create-iris.gif) O Iris tem uma **[documentação](https://www.iris-go.com/docs)** ampla e detalhada que facilita começar com o framework. Para uma documentação técnica mais detalhada, visite nossos [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11). E para código executável, você sempre pode visitar o subdiretório [./_examples](_examples) do repositório. ### Desenvolva com o Plexon AI O [Plexon AI](https://plexon.ai) é um assistente de programação com IA multiplataforma da Hellenic Development, e vem com uma **skill dedicada ao Iris**: um guia de desenvolvimento da v14 escrito pelo próprio autor do framework, com dezenove documentos de referência que cobrem roteamento e macros, a API de contexto, os auxiliares `rest`, tratamento de erros, os trinta middlewares, os controladores nativos, o SDK de autenticação, endurecimento de segurança, persistência, cache, i18n, observabilidade, desempenho, testes, implantação e a migração da v12 para a v14. Instale a persona **Software Developer** e a skill do Iris vem junto, ao lado dos agentes de engenharia que ela ativa. Aí o seu assistente escreve código Iris do jeito que o framework foi feito para ser usado, em vez de adivinhar pelo que viu durante o treinamento. ### Você gosta de ler enquanto viaja? Capa do livro [![follow author on twitter](https://img.shields.io/twitter/follow/makismaropoulos?color=3D8AA3&logoColor=3D8AA3&style=for-the-badge&logo=twitter)](https://twitter.com/intent/follow?screen_name=makismaropoulos) [![follow Iris web framework on twitter](https://img.shields.io/twitter/follow/iris_framework?color=ee7506&logoColor=ee7506&style=for-the-badge&logo=twitter)](https://twitter.com/intent/follow?screen_name=iris_framework) [![follow Iris web framework on facebook](https://img.shields.io/badge/Follow%20%40Iris.framework-569-2D88FF.svg?style=for-the-badge&logo=facebook)](https://www.facebook.com/iris.framework) Você pode [solicitar](https://www.iris-go.com/#ebookDonateForm) hoje o PDF e o acesso online do **E-Book do Iris** (Nova Edição) e participar do desenvolvimento do Iris. ## 🙌 Contribuindo Adoraríamos ver sua contribuição ao Iris Web Framework! Para mais informações sobre como contribuir com o projeto Iris, veja o arquivo [CONTRIBUTING.md](CONTRIBUTING.md). [Lista de todos os contribuidores](https://github.com/kataras/iris/graphs/contributors) ## 🛡 Vulnerabilidades de segurança Se você descobrir uma vulnerabilidade de segurança no Iris, envie um e-mail para [iris-go@outlook.com](mailto:iris-go@outlook.com). Todas as vulnerabilidades de segurança serão tratadas prontamente. ## 📝 Licença Este projeto está licenciado sob a [licença BSD de 3 cláusulas](LICENSE), assim como o próprio projeto Go. O nome do projeto "Iris" foi inspirado na mitologia grega.