Le bon cadre
Capture d'écran des métriques du stand de test à long terme Gramework réalisée avec le tableau de bord Gramework Stats et le middleware de métriques
Gramework est un framework Web rapide, très efficace, fiable, prioritaire pour SPA, créé par un mainteneur fasthttp. Vous bénéficiez d'une API simple mais puissante, nous gérons les optimisations en interne. Nous sommes toujours heureux de voir vos demandes de fonctionnalités et vos PR.
Raisons d'utiliser Gramework
Go >= 1.10.8 est la plus ancienne version testée et prise en charge en permanence.
Si vous rencontrez des vulnérabilités, n'hésitez pas à les soumettre via [email protected].
Nom | Lien/Badge |
---|---|
Documents | GoDoc |
Notre Jira | Jira |
Rapport de licence | Rapport |
Journal des modifications | Journal des modifications |
Soutenez-nous avec un don ou devenez sponsor | OuvrirCollectif |
Notre chat Telegram | @gramework |
Notre chaîne #gramework dans Gophers Slack | https://gophers.slack.com |
Notre serveur Discord | https://discord.gg/HkW8DsD |
Couverture des succursales principales | |
Statut de branche principale | |
Couverture des branches de développement | |
Statut de la branche de développement | |
Meilleures pratiques CII | |
Tableau de bord de statistiques Gramework pour Grafana | https://grafana.com/dashboards/3422 |
Contacts d'assistance | Par e-mail : [email protected] |
Via la communauté Telegram : @gramework |
Ce projet existe grâce à nos formidables contributeurs ! [Contribuer].
Merci à tous nos contributeurs ! [Devenez contributeur]
Soutenez ce projet en devenant sponsor. Votre logo apparaîtra ici avec un lien vers votre site Web. [Devenez parrain]
/third_party_licenses/fasthttp
et /third_party_licenses/fasthttprouter
.nettls_*.go
, est une version intégrée de caddytls, car son utilisation via une simple importation n'est pas une option, le framework est basé sur fasthttp
, qui est incompatible avec net/http
. Dans le commit sur lequel je me base, caddy est sous licence Apache-2.0
. Sa licence placée dans /third_party_licenses/caddy
. @mholt nous permet de copier le code dans ce dépôt. L'exemple ci-dessous servira "hello, gramworld". Gramework enregistrera l'indicateur bind
pour vous, ce qui vous permettra de choisir une autre adresse IP/port sur lequel Gramework doit écouter :
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/" , "hello, grameworld" )
app . ListenAndServe ()
}
Si vous ne souhaitez pas prendre en charge l'indicateur bind
, transmettez l'argument d'adresse facultatif à ListenAndServe
.
REMARQUE : tous les exemples ci-dessous enregistreront l'indicateur bind
.
À partir de la version : 1.1.0-rc1
L'exemple ci-dessous servira {"hello":"grameworld"}
à partir de la carte. Gramework enregistrera l'indicateur bind
pour vous, ce qui vous permettra de choisir une autre adresse IP/port sur lequel Gramework doit écouter :
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/" , func () map [ string ] interface {} {
return map [ string ] interface {}{
"hello" : "gramework" ,
}
})
app . ListenAndServe ()
}
À partir de la version : 1.1.0-rc1
L'exemple ci-dessous servira {"hello":"grameworld"}
à partir de la structure. Gramework enregistrera l'indicateur bind
pour vous, ce qui vous permettra de choisir une autre adresse IP/port sur lequel Gramework doit écouter :
package main
import (
"github.com/gramework/gramework"
)
type SomeResponse struct {
hello string
}
func main () {
app := gramework . New ()
app . GET ( "/" , func () interface {} {
return SomeResponse {
hello : "gramework" ,
}
})
app . ListenAndServe ()
}
L'exemple ci-dessous servira les fichiers statiques de ./files
:
package main
import (
"github.com/gramework/gramework"
)
func main () {
app := gramework . New ()
app . GET ( "/*any" , app . ServeDir ( "./files" ))
app . ListenAndServe ()
}
L'exemple ci-dessous servira une tranche d'octets :
package main
import (
"fmt"
"os"
"time"
"github.com/gramework/gramework"
)
type SomeData struct {
Name string
Age uint8
}
func main () {
app := gramework . New ()
d := SomeData {
Name : "Grame" ,
Age : 20 ,
}
// service-wide CORS. you can also instead of using middleware
// call ctx.CORS() manually
app . Use ( app . CORSMiddleware ())
app . GET ( "/someJSON" , func ( ctx * gramework. Context ) {
// send json, no metter if user asked for json, xml or anything else.
if err := ctx . JSON ( d ); err != nil {
// you can return err instead of manual checks and Err500() call.
// See next handler for example.
ctx . Err500 ()
}
})
app . GET ( "/simpleJSON" , func ( ctx * gramework. Context ) error {
return ctx . JSON ( d )
})
app . GET ( "/someData" , func ( ctx * gramework. Context ) error {
// send data in one of supported encodings user asked for.
// Now we support json, xml and csv. More coming soon.
sentType , err := ctx . Encode ( d )
if err != nil {
ctx . Logger . WithError ( err ). Error ( "could not process request" )
return err
}
ctx . Logger . WithField ( "sentType" , sentType ). Debug ( "some request-related message" )
return nil
})
// you can omit context if you want, return `interface{}`, `error` or both.
app . GET ( "/simplestJSON" , func () interface {} {
return d
})
// you can also use one of built-in types as a handler, we got you covered too
app . GET ( "/hostnameJSON" , fmt . Sprintf ( `{"hostname": %q}` , os . Hostname ()))
wait := make ( chan struct {})
go func () {
time . Sleep ( 10 * time . Minute )
app . Shutdown ()
wait <- struct {}{}
}()
app . ListenAndServe ()
// allow Shutdown() to stop the app properly.
// ListenAndServe will return before Shutdown(), so we should wait.
<- wait
}
Cet exemple montre comment migrer de fasthttp vers Gramework sans réécrire vos gestionnaires.
package main
import (
"github.com/gramework/gramework"
"github.com/valyala/fasthttp"
)
func main () {
app := gramework . New ()
app . GET ( "/someJSON" , func ( ctx * fasthttp. RequestCtx ) {
ctx . WriteString ( "another data" )
})
app . ListenAndServe ()
}