Golang on yksi eniten maksavista, kysytyistä ohjelmointikielistä, jossa on monia sovelluksia. Kun yhdistät kehykset, kuten Gin, Revel ja gorilla/mux, voit helposti luoda API:n Golla.
Opi luomaan CRUD API Golangissa Gin HTTP -kehyksen avulla.
PÄIVÄN VIDEON TEKEMINEN
Alkuasennus ja asennus
Aloita Golangin kanssa asentamalla sen tietokoneellesi, jos et ole jo tehnyt niin.
Asennuksen jälkeen seuraava vaihe on luoda projektin juurikansio koneellesi ja alustaa Go-moduuli kyseiseen juurihakemistoon.
Voit tehdä tämän avaamalla CLI , siirry projektisi juurikansioon ja suorita:
go mod init module_name
Näet moduulisi nimen (esim. CRUD_API ) ja sen versio, kun avaat go.mod tiedosto. Kaikki mukautetut paketit tulevat tästä ylämoduulista. Joten mikä tahansa tuotu mukautettu paketti on muodossa:
import(package CRUD_API/package-directory-name)
Asenna seuraavaksi CRUD API:n luomiseen tarvittavat paketit. Käytä tässä tapauksessa Gin Gonic reitittääksesi API-päätepisteet:
go get github.com/gin-gonic/gin
Asenna nyt MongoDB-ohjain tietojen tallentamiseksi:
go get go.mongodb.org/mongo-driver/mongo
Yhteyden muodostaminen Siirry MongoDB:hen
Tarvitset vain MongoDB URI:si yhdistääksesi Golangin tietokantaan. Se näyttää yleensä tältä, jos muodostat yhteyden MongoDB Atlasiin paikallisesti:
Mongo_URL = "mongodb://127.0.0.1:27017"
Luo nyt uusi kansio projektisi juurihakemistoon ja kutsu se tietokannat . Luo Go-tiedosto tähän kansioon ja nimeä se tietokanta.go .
Tämä on tietokantapakettisi, ja se alkaa tuomalla tarvittavat kirjastot:
kuinka nopeuttaa torrentin lataamista
package database
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func ConnectDB() *mongo.Client {
Mongo_URL := "mongodb://127.0.0.1:27017"
client, err := mongo.NewClient(options.Client().ApplyURI(Mongo_URL))
if err != nil {
log.Fatal(err)
}
ctx, cancel := context.WithTimeout(context.Background(), 10 * time.Second)
err = client.Connect(ctx)
defer cancel()
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to mongoDB")
return client
}
On paras käytäntö piilottaa ympäristömuuttujat, kuten tietokantayhteysmerkkijono a:ssa .env tiedosto käyttämällä dotenv-pakettia . Tämä tekee koodistasi kannettavamman ja on kätevä, kun käytät a MongoDB-pilviklusterin ilmentymä , esimerkiksi.
The ConnectDB toiminto muodostaa yhteyden ja palauttaa uuden MongoDB Client -objektin.
Luo tietokantakokoelma
MongoDB tallentaa tiedot kokoelmiin, jotka tarjoavat käyttöliittymän taustalla oleviin tietokantatietoihin.
Voit hoitaa kokoelman noutotoiminnon luomalla uuden kansion, Kokoelma , projektisi juuressa. Luo nyt uusi Go-tiedosto, getCollection.go , joka saa kokoelman tietokannasta:
package getcollection
import (
"go.mongodb.org/mongo-driver/mongo"
)
func GetCollection(client *mongo.Client, collectionName string) *mongo.Collection {
collection := client.Database("myGoappDB").Collection("Posts")
return collection
}
Tämä toiminto saa kokoelman MongoDB-tietokannasta. Tietokannan nimi tässä tapauksessa on myGoappDB , kanssa Viestit sen kokoelmana.
Luo tietokantamalli
Tee uusi kansio juurihakemistoosi ja kutsu se malli- . Tämä kansio käsittelee tietokantamalliasi.
Luo uusi Go-tiedosto kyseiseen kansioon ja kutsu se model.go . Mallisi on tässä tapauksessa blogikirjoitus, jonka otsikko on:
package model
import (
"go.mongodb.org/mongo-driver/bson/primitive"
)
type Post struct {
ID primitive.ObjectID
Title string
Article string
}
CRUD API:n luominen Golla
Seuraavaksi luodaan CRUD API. Aloita tästä osiosta luomalla projektisi juurihakemistoon uusi kansio päätepisteiden käsittelemistä varten. Kutsu sitä reitit .
Luo erillinen Go-tiedosto tähän kansioon kullekin toiminnolle. Voit esimerkiksi nimetä ne luo.go , read.go , update.go , ja delete.go . Vie nämä käsittelijät nimellä reitit paketti.
POST-päätepisteen luominen Gossa
Aloita määrittämällä POST-päätepiste tietojen kirjoittamiseksi tietokantaan.
Sisällä routes/create.go , lisää seuraavat:
package routes
import (
getcollection "CRUD_API/Collection"
database "CRUD_API/databases"
model "CRUD_API/model"
"context"
"log"
"net/http"
"time"
"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson/primitive"
)
func CreatePost(c *gin.Context) {
var DB = database.ConnectDB()
var postCollection = getcollection.GetCollection(DB, "Posts")
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
post := new(model.Posts)
defer cancel()
if err := c.BindJSON(&post); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"message": err})
log.Fatal(err)
return
}
postPayload := model.Posts{
Id: primitive.NewObjectID(),
Title: post.Title,
Article: post.Article,
}
result, err := postCollection.InsertOne(ctx, postPayload)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"message": err})
return
}
c.JSON(http.StatusCreated, gin.H{"message": "Posted successfully", "Data": map[string]interface{}{"data": result}})
}
Tämä koodi alkaa tuomalla projektin mukautetut moduulit. Sitten se tuo kolmannen osapuolen paketteja, mukaan lukien Gin ja MongoDB-ohjain .
Edelleen, postCollection sisältää tietokantakokoelman. Erityisesti c.BindJSON('viesti') on JSONified-mallin ilmentymä, joka kutsuu jokaista mallikenttää nimellä postPayload ; tämä menee tietokantaan.
Kuinka luoda GET-päätepiste
GET-päätepiste, sisään routes/read.go , lukee yksittäisen asiakirjan tietokannasta yksilöllisen tunnuksensa kautta. Se alkaa myös tuomalla mukautettuja ja kolmannen osapuolen paketteja:
package routes
import (
getcollection "CRUD_API/Collection"
database "CRUD_API/databases"
model "CRUD_API/model"
"context"
"net/http"
"time"
"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
func ReadOnePost(c *gin.Context) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
var DB = database.ConnectDB()
var postCollection = getcollection.GetCollection(DB, "Posts")
postId := c.Param("postId")
var result model.Posts
defer cancel()
objId, _ := primitive.ObjectIDFromHex(postId)
err := postCollection.FindOne(ctx, bson.M{"id": objId}).Decode(&result)
res := map[string]interface{}{"data": result}
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"message": err})
return
}
c.JSON(http.StatusCreated, gin.H{"message": "success!", "Data": res})
}
The viestit muuttuja on parametrimääritys. Se saa asiakirjan objektitunnuksen muodossa objId .
Kuitenkin, tulos on tietokantamallin esiintymä, joka sisältää myöhemmin palautetun asiakirjan muodossa res .
Kuinka luoda PUT-päätepiste
PUT-käsittelijä, sisään routes/update.go , on samanlainen kuin POST-käsittelijä. Tällä kertaa se päivittää olemassa olevan viestin ainutlaatuisella objektitunnuksellaan:
package routes
import (
getcollection "CRUD_API/Collection"
database "CRUD_API/databases"
model "CRUD_API/model"
"context"
"net/http"
"time"
"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
func UpdatePost(c *gin.Context) {
ctx, cancel := context.WithTimeout(context.Background(), 10 * time.Second)
var DB = database.ConnectDB()
var postCollection = getcollection.GetCollection(DB, "Posts")
postId := c.Param("postId")
var post model.Posts
defer cancel()
objId, _ := primitive.ObjectIDFromHex(postId)
if err := c.BindJSON(&post); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"message": err})
return
}
edited := bson.M{"title": post.Title, "article": post.Article}
result, err := postCollection.UpdateOne(ctx, bson.M{"id": objId}, bson.M{"$set": edited})
res := map[string]interface{}{"data": result}
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"message": err})
return
}
if result.MatchedCount < 1 {
c.JSON(http.StatusInternalServerError, gin.H{"message": "Data doesn't exist"})
return
}
c.JSON(http.StatusCreated, gin.H{"message": "data updated successfully!", "Data": res})
}
Mallin esiintymän JSON-muoto ( lähettää ) kutsuu jokaista mallikenttää tietokannasta. Tulosmuuttuja käyttää MongoDB:tä $set operaattori päivittää vaaditun asiakirjan, jota kutsutaan sen objektitunnuksella.
xbox one -ohjaimen asentaminen tietokoneeseen
The result.MatchedCount ehto estää koodin suorittamisen, jos tietokannassa ei ole tietueita tai välitetty tunnus on virheellinen.
Luodaan DELETE-päätepistettä
DELETE-päätepiste, sisään delete.go , poistaa asiakirjan URL-parametrina välitetyn objektitunnuksen perusteella:
package routes
import (
getcollection "CRUD_API/Collection"
database "CRUD_API/databases"
"context"
"net/http"
"time"
"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
func DeletePost(c *gin.Context) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
var DB = database.ConnectDB()
postId := c.Param("postId")
var postCollection = getcollection.GetCollection(DB, "Posts")
defer cancel()
objId, _ := primitive.ObjectIDFromHex(postId)
result, err := postCollection.DeleteOne(ctx, bson.M{"id": objId})
res := map[string]interface{}{"data": result}
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"message": err})
return
}
if result.DeletedCount < 1 {
c.JSON(http.StatusInternalServerError, gin.H{"message": "No data to delete"})
return
}
c.JSON(http.StatusCreated, gin.H{"message": "Article deleted successfully", "Data": res})
}
Tämä koodi poistaa tietueen käyttämällä DeleteOne toiminto. Se käyttää myös result.DeletedCount -ominaisuus estää koodin suorittamisen, jos tietokanta on tyhjä tai objektin tunnus on virheellinen.
Luo API Runner -tiedosto
Luo lopuksi a main.go projektisi juurihakemistossa. Lopullisen projektisi rakenteen pitäisi näyttää tältä:
Tämä tiedosto käsittelee reitittimen suorittamisen jokaiselle päätepisteelle:
package main
import (
routes "CRUD_API/routes"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.POST("/", routes.CreatePost)
// called as localhost:3000/getOne/{id}
router.GET("getOne/:postId", routes.ReadOnePost)
// called as localhost:3000/update/{id}
router.PUT("/update/:postId", routes.UpdatePost)
// called as localhost:3000/delete/{id}
router.DELETE("/delete/:postId", routes.DeletePost)
router.Run("localhost: 3000")
}
Tämä tiedosto on pääpaketti, joka suorittaa muita tiedostoja. Se alkaa tuomalla reittikäsittelijät. Seuraava on reititin muuttuja, a gin esiintymä, joka herättää HTTP-toiminnot ja kutsuu jokaista päätepistettä sen funktion nimellä reitit paketti.
CRUD-projektisi jatkuu paikallinen isäntä: 3000 . Palvelimen ajamiseen ja testaa CRUD API:ta , suorita seuraava komento perushakemistossasi:
go run main.go
Tee Golang CRUD -projektistasi käyttökelpoinen tuote
Olet onnistuneesti luonut CRUD API:n Golla; Onnittelut, Vaikka tämä on pieni projekti, olet nähnyt, mitä tavallisten HTTP-pyyntöjen suorittaminen vaatii Gossa.
Voit saada lisää luovuutta laajentamalla tätä käytännöllisemmäksi sovellukseksi, joka tuottaa arvoa käyttäjille. Go on sopiva ohjelmointikieli useisiin käyttötarkoituksiin.