105 KiB
Νέα
🚀 Το Iris v14 έρχεται. Η επόμενη κύρια έκδοση είναι η μεγαλύτερη στην ιστορία του project: το framework ξαναχτισμένο πάνω στα Go generics, ένας builder εφαρμογής που ελέγχεται από τον compiler, βοηθοί αιτημάτων που κάνουν validation για εσάς, ένας κεντρικός χάρτης σφαλμάτων, τριάντα ενσωματωμένα middleware και ένα βιβλίο μέσα στο ίδιο το repository. Δείτε τι έρχεται στο Iris v14 παρακάτω.
Η έκδοση που περιγράφεται εδώ, η v12, συνεχίζει να δουλεύει και να δέχεται διορθώσεις. Το v14 έρχεται σε νέο import path, οπότε τίποτα δικό σας δεν σπάει την ημέρα που θα βγει.
Iris Web Framework English
العربية
⚡ Το Iris είναι ένα γρήγορο, απλό αλλά και πλήρως λειτουργικό και πολύ αποδοτικό web framework για τη Go.
✨ Παρέχει ένα εκφραστικό και εύχρηστο υπόβαθρο για την επόμενη ιστοσελίδα ή το επόμενο API σας.
🌟 Μάθετε τι λένε οι άλλοι για το Iris και δώστε ένα αστεράκι σε αυτό το έργο ανοιχτού κώδικα
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 <strong>%s</strong>!", "World")
})
app.Listen(":8080")
}
Όπως είπε κάποτε ένας προγραμματιστής της Go, το Iris σε καλύπτει σε όλα και στέκεται δυνατό όλα αυτά τα χρόνια ⭐
Μερικά από όσα προσφέρει το Iris:
- HTTP/2 (Push, ακόμα και Embedded data)
- Middleware (Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite)
- Εκδόσεις API (API Versioning)
- Model-View-Controller
- Websockets
- gRPC
- Auto-HTTPS
- Ενσωματωμένη υποστήριξη ngrok, ο γρηγορότερος τρόπος να βγει η εφαρμογή σας στο διαδίκτυο
- Μοναδικός Router με δυναμικές διαδρομές ως παραμέτρους, με τυποποιημένους τύπους όπως :uuid, :string, :int... και τη δυνατότητα να φτιάξετε δικούς σας
- Συμπίεση
- View Engines (HTML, Django, Handlebars, Pug/Jade και άλλα)
- Φτιάξτε τον δικό σας File Server και φιλοξενήστε τον δικό σας WebDAV server
- Cache
- Τοπικοποίηση (i18n, sitemap)
- Sessions
- Πλούσιες αποκρίσεις (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events και άλλα)
- Συμπίεση απόκρισης (gzip, deflate, brotli, snappy, s2)
- Πλούσια αιτήματα (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack και άλλα)
- Dependency Injection (MVC, Handlers, API Routers)
- Testing Suite
- Και το πιο σημαντικό... παίρνετε γρήγορες απαντήσεις και υποστήριξη, από την πρώτη μέρα μέχρι σήμερα
🚀 Τι έρχεται στο Iris v14
Το Iris v14 είναι η μεγαλύτερη έκδοση στην ιστορία του έργου. Ξαναχτίζει το framework πάνω στα Go generics και αλλάζει τον τρόπο που συναρμολογείται μια εφαρμογή: λιγότερο στήσιμο μέσα στη main, πιο σύντομοι handlers, και ένα μόνο σημείο για τις αποφάσεις που παλιά ήταν σκορπισμένες σε κάθε route.
Τίποτα από αυτά δεν χρειάζεται την προσοχή σας σήμερα. Η v12 συνεχίζει να δουλεύει, συνεχίζει να δέχεται διορθώσεις, και το v14 έρχεται με έναν οδηγό μετάβασης που καλύπτει κάθε API που μετονομάστηκε ή αφαιρέθηκε.
Ολόκληρη η εφαρμογή σε μία αλυσίδα που ελέγχει ο compiler
Το iris.NewBuilder συνδέει CORS, συμπίεση, access logging, το health endpoint, τον χάρτη σφαλμάτων, τα services σας και τα API groups σας σε μία έκφραση. Ο compiler επιβάλλει τη σειρά των βημάτων, οπότε μια εφαρμογή είτε χτίζεται σωστά είτε δεν χτίζεται καθόλου.
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")
Οι handlers σταματούν να επαναλαμβάνονται
Το decoding, το validation και η απόδοση των σφαλμάτων φεύγουν από το σώμα του handler. Το rest.ReadJSON[T] αποκωδικοποιεί το αίτημα, τρέχει τη μέθοδο Validate() error του τύπου σας όταν υπάρχει, και γράφει το ίδιο το 400. Οι βοηθοί απόκρισης γράφουν το status της επιτυχίας, ή ό,τι λέει ο κεντρικός σας χάρτης ότι πρέπει να επιστρέψει αυτό το σφάλμα.
func (api *ProductsAPI) create(ctx iris.Context) {
input, ok := rest.ReadJSON[catalog.ProductInput](ctx)
if !ok {
return // Το 400 έχει ήδη γραφτεί: κακοσχηματισμένο JSON ή αποτυχία στο Validate.
}
id, err := api.svc.Create(ctx, input)
rest.Created(ctx, id, err) // 201, ή το κεντρικά αντιστοιχισμένο σφάλμα.
}
Τα rest.OK, rest.NoContent, rest.Count και rest.Paginated καλύπτουν τις υπόλοιπες μορφές που επιστρέφει ένα API.
Τα σφάλματα δηλώνονται μία φορά
Το νέο πακέτο rest/errors κρατά την αντιστοίχιση από τα σφάλματα του τομέα σας σε HTTP αποκρίσεις. Οι clients παίρνουν τυποποιημένα, μηχανικά αναγνώσιμα payloads. Τα εσωτερικά μηνύματα μένουν εσωτερικά. Δηλώστε έναν collector και κάθε αποτυχία φτάνει στον logger ή στη βάση δεδομένων σας από ένα μόνο σημείο. Ένα σφάλμα μπορεί να αποδοθεί ως JSON ή ως view, ανάλογα με το τι ζήτησε ο client.
Dependency injection παντού, όχι μόνο στο MVC
Οι constructors δηλώνουν τι χρειάζονται και το container τους το δίνει: για handlers, για API groups, για controllers. Ένα service που υλοποιεί Init(ctx context.Context) error τρέχει μία φορά μέσα στο Build(). Ό,τι κλείνει, κλείνει στο shutdown. Το πακέτο hero έφυγε, αντικαταστάθηκε από τα dep και rest, που κάνουν περισσότερα με λιγότερες γραμμές. Οι MVC controllers είναι χτισμένοι πάνω στα generics.
Τα πακέτα βρίσκονται εκεί που θα τα περιμένατε
Τα sessions, cache, websocket, i18n, view και versioning έγιναν middleware. Το mvc μετακόμισε κάτω από το controller, δίπλα στους νέους controllers fileserver, sitemap και apigraph. Το apigraph αποδίδει το δέντρο των routes σας ως διαδραστικό γράφημα D3.
Τριάντα middleware έρχονται ενσωματωμένα, ανάμεσά τους και νέα: httpcost (χρόνος, μνήμη και CPU ανά αίτημα, για μελέτη επιδόσεων ή για χρέωση), bodylimit, compress, counter, referrer, geolocation, ipaccess και servertiming. Οι υλοποιήσεις των view engines μετακόμισαν στο iris-contrib/views.
Οι ρυθμίσεις είναι ένα μερικό literal
Το iris.Configuration και οι With* configurators αντικαθίστανται από το iris.Options. Ορίζετε μόνο τα πεδία που σας ενδιαφέρουν και τα υπόλοιπα έρχονται από τις προεπιλογές. Το Bind φορτώνει YAML από τη μεταβλητή περιβάλλοντος SERVER_CONFIG και μετά από αρχείο.
app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"})
Ονόματα που λένε τι κάνουν
Η ανάγνωση ενός request header και ο ορισμός ενός response header δεν μοιράζονται πια ένα πρόθεμα που αλλάζει σιωπηλά νόημα: το ctx.Header διαβάζει το αίτημα, ενώ τα ctx.SetHeader και ctx.ResponseHeader δουλεύουν στην απόκριση. Το Party έγινε Router. Το ctx.URLParam έγινε ctx.Query().Get. Κάθε μετονομασία είναι καταγραμμένη στον οδηγό μετάβασης μαζί με την αντικατάστασή της, και οι περισσότερες είναι μία αναζήτηση και αντικατάσταση.
Ασφαλές εξ ορισμού
Τα cookies των sessions έρχονται με Secure και SameSite=Lax. Το όριο μεγέθους του request body επιβάλλεται σε κάθε διαδρομή ανάγνωσης. Μαζί με το ξαναχτίσιμο έπεσαν και χρόνια bugs, ανάμεσά τους ένας rate limiter που κατέγραφε τα όρια χωρίς ποτέ να τα επιβάλλει και μια κλήση Logout που μπορούσε να πάρει μαζί της όλη τη διεργασία.
Τεκμηρίωση που διαβάζεται από την αρχή ως το τέλος
Το v14 έρχεται με ένα βιβλίο 23 κεφαλαίων μέσα στο repository, έναν οδηγό πρώτων βημάτων που χτίζει ένα δοκιμασμένο REST API μέσα σε ένα κείμενο, έναν οδηγό μετάβασης για εφαρμογές v12, και ένα ζωντανό AI wiki παραγόμενο από τον πηγαίο κώδικα που απαντά σε ερωτήσεις για τη βάση κώδικα.
Τι σημαίνει για τον v12 κώδικά σας
Το import path γίνεται github.com/kataras/iris/v14, οπότε v12 και v14 μπορούν να συνυπάρχουν και τίποτα δεν σπάει την ημέρα της κυκλοφορίας. Αναβαθμίζετε όποτε σας βολεύει. Ο οδηγός μετάβασης καλύπτει το import path, τις μετακινήσεις πακέτων, κάθε API που αφαιρέθηκε και την αντικατάστασή του, καθώς και τις αλλαγές συμπεριφοράς, με έτοιμες εντολές για τα μηχανικά κομμάτια.
Δεν υπάρχει ακόμα δημόσια ημερομηνία κυκλοφορίας. Παρακολουθήστε τα releases ή ακολουθήστε το @iris_framework για να το μάθετε πρώτοι.
👑 Υποστηρικτές
Με τη βοήθειά σας, μπορούμε να κάνουμε την ανάπτυξη web ανοιχτού κώδικα καλύτερη για όλους!
📖 Μαθαίνοντας το Iris
Εγκατάσταση
Η μόνη απαίτηση είναι η γλώσσα προγραμματισμού Go.
Δημιουργία νέου project
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest # ή @v12.2.11
Εγκατάσταση σε υπάρχον project
$ cd myapp
$ go get github.com/kataras/iris/v12@latest
Εκτέλεση
$ go mod tidy -compat=1.23 # -compat="1.23" για windows.
$ go run .
Το Iris διαθέτει εκτενή και λεπτομερή τεκμηρίωση που κάνει εύκολο το ξεκίνημα με το framework.
Για πιο λεπτομερή τεχνική τεκμηρίωση μπορείτε να κατευθυνθείτε στα godocs μας. Και για εκτελέσιμο κώδικα μπορείτε πάντα να επισκεφθείτε τον υποκατάλογο ./_examples του repository.
Αναπτύξτε με το Plexon AI
Το Plexon AI είναι ένας cross-platform βοηθός προγραμματισμού με τεχνητή νοημοσύνη από τη Hellenic Development, και έρχεται με ένα ειδικό skill για το Iris: έναν οδηγό ανάπτυξης για την v14 γραμμένο από τον ίδιο τον δημιουργό του framework, με δεκαεννέα κείμενα αναφοράς που καλύπτουν routing και macros, το context API, τους βοηθούς rest, τη διαχείριση σφαλμάτων, και τα τριάντα middleware, τους ενσωματωμένους controllers, το SDK αυθεντικοποίησης, τη θωράκιση ασφάλειας, την αποθήκευση δεδομένων, το caching, το i18n, την παρατηρησιμότητα, τις επιδόσεις, τα tests, την ανάπτυξη σε παραγωγή και τη μετάβαση από την v12 στην v14.
Εγκαταστήστε την persona Software Developer και το skill του Iris έρχεται μαζί της, δίπλα στους agents μηχανικής που ενεργοποιεί. Ο βοηθός σας τότε γράφει κώδικα Iris όπως προορίζεται να χρησιμοποιείται το framework, αντί να μαντεύει από ό,τι έτυχε να δει στην εκπαίδευσή του.
Σας αρέσει να διαβάζετε ενώ ταξιδεύετε;
Μπορείτε να ζητήσετε σήμερα την PDF έκδοση και την online πρόσβαση στο Ηλεκτρονικό Βιβλίο του Iris (Νέα Έκδοση) και να συμμετάσχετε στην ανάπτυξη του Iris.
🙌 Συνεισφορά
Θα θέλαμε να δούμε τη συνεισφορά σας στο Iris Web Framework! Για περισσότερες πληροφορίες σχετικά με το πώς μπορείτε να συνεισφέρετε, δείτε το αρχείο CONTRIBUTING.md.
Κατάλογος όλων των συνεισφερόντων
🛡 Αδυναμίες Ασφαλείας
Εάν εντοπίσετε κάποια αδυναμία ασφαλείας στο Iris, στείλτε ένα μήνυμα ηλεκτρονικού ταχυδρομείου στο iris-go@outlook.com. Όλες οι αδυναμίες ασφαλείας θα αντιμετωπιστούν άμεσα.
📝 Άδεια Χρήσης
Αυτό το έργο διατίθεται υπό την άδεια BSD 3-clause, όπως και η ίδια η γλώσσα Go.
Το όνομα "Iris" εμπνεύστηκε από την ελληνική μυθολογία.

