Maison  >  Article  >  développement back-end  >  Ajouter à la liste existante via une requête http

Ajouter à la liste existante via une requête http

WBOY
WBOYavant
2024-02-14 15:57:071001parcourir

通过 http 请求追加到现有列表

Éditeur PHP Xiaoxin L'ajout à une liste existante via des requêtes http est une méthode courante d'exploitation des données. En envoyant des requêtes http, nous pouvons ajouter de nouvelles données à la liste existante pour réaliser une mise à jour dynamique et l'ajout de données. Cette méthode est très couramment utilisée dans le développement Web et peut réaliser un affichage et une mise à jour en temps réel après que les utilisateurs ont soumis des données. L'ajout à une liste existante via des requêtes http est simple et rapide, améliorant l'interactivité et l'expérience utilisateur des pages Web. Que ce soit dans la page front-end ou dans la logique back-end, les données peuvent être ajoutées de cette manière pour obtenir des fonctions plus riches et plus pratiques.

Contenu de la question

J'utilise echo pour créer une simple API de repos. J'ai une variable qui est la carte suivante, basée sur cette structure que j'ai faite :

type checklist struct {
        id         int      `json:"id"`
        title      string   `json:"title"`
        lines      []string `json:"lines"`
        authorname string   `json:"authorname"`
        authorid   int      `json:"authorid"`
        tags       []tag    `json:"tags"`
    }

    var (
        checklists    = map[int]*checklist{}
        checklistseq  = 1
        checklistlock = sync.mutex{}
    )

Après avoir créé une nouvelle liste de contrôle et l'avoir ajoutée à la variable checklists, comment puis-je envoyer une demande pour ajouter une nouvelle ligne dans le champ « lignes » de la nouvelle liste de contrôle ?

La solution à laquelle j'ai pensé est la suivante :

func createchecklist(c echo.context) error {
        checklistlock.lock()
        defer checklistlock.unlock()
        newchecklist := &checklist{
            id:    checklistseq,
            lines: make([]string, 0),
            tags:  make([]tag, 0),
        }
        if err := c.bind(newchecklist); err != nil {
            return err
        }
        checklists[newchecklist.id] = newchecklist
        checklistseq++
        return c.json(http.statusok, newchecklist)
    }
    func addline(c echo.context) error {
        checklistlock.lock()
        defer checklistlock.unlock()
        id, _ := strconv.atoi(c.param("id"))
        checklist := *checklists[id]
        line := []string{""}
        if err := c.bind(line); err != nil {
            return err
        }
        checklist.lines = line
        return c.json(http.statuscreated, checklists)
    }

Cependant, lorsque je teste ce gestionnaire, il donne les résultats suivants :

// 1: Creating a new checklist

    $ curl -X POST -H 'Content-Type: application/json' -d '{"title": "test"}' localhost:1234/checklist

    >> {"id":1,"title":"test","lines":[],"authorName":"","authorID":0,"tags":[]}

    // 2: Check to see the checklist has been created.
 
    $ curl -X GET localhost:1234/checklist

    >> {"1":{"id":1,"title":"test","lines":[],"authorName":"","authorID":0,"tags":[]}}
    // 3: Attempting to create a new line
    $ curl -X POST -H 'Content-Type: application/json' -d '{"lines": "test123"}' localhost:1234/checklist/1

    >> curl: (52) Empty reply from server

    // 4: Confirming it hasn't been created.

    $ curl -X GET localhost:1234/checklist

    >> {"1":{"id":1,"title":"test","lines":[],"authorName":"","authorID":0,"tags":[]}}

La fonction ne fonctionne donc pas réellement car le ping de la publication vers l'itinéraire approprié ne renvoie pas la réponse attendue ni n'ajoute réellement la ligne au champ.

Solution

func addline(c echo.context) error {
    checklistlock.lock()
    defer checklistlock.unlock()

    id, err := strconv.atoi(c.param("id"))
    if err != nil {
        return err
    }

    // do not deref *checklist
    cl, ok := checklists[id]
    if !ok {
        return echo.errnotfound
    }

    // use same structure as the expected json
    var input struct { lines []string `json:"lines"` }

    // always pass a pointer to c.bind
    if err := c.bind(&input); err != nil {
        return err
    }

    // do not overwrite previously written lines, use append
    cl.lines = append(cl.lines, input.lines...)

    return c.json(http.statusok, cl)
}

Essayez-le maintenant :

$ curl -X POST -H 'Content-Type: application/json' -d '{"lines": ["test123"]}' localhost:1234/checklist/1

(note "test123" entre parenthèses)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer