Maison > Article > développement back-end > Ajouter à la liste existante via une requête 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.
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.
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!