Heim > Artikel > Backend-Entwicklung > Über eine HTTP-Anfrage an die vorhandene Liste anhängen
PHP-Editor Xiaoxin Das Anhängen an eine vorhandene Liste über HTTP-Anfragen ist eine gängige Datenoperationsmethode. Durch das Senden von HTTP-Anfragen können wir neue Daten an die vorhandene Liste anhängen, um eine dynamische Aktualisierung und Hinzufügung von Daten zu erreichen. Diese Methode wird sehr häufig in der Webentwicklung verwendet und kann eine Echtzeitanzeige und -aktualisierung ermöglichen, nachdem Benutzer Daten übermittelt haben. Das Anhängen an eine bestehende Liste über HTTP-Anfragen ist einfach und schnell und verbessert die Interaktivität und Benutzererfahrung von Webseiten. Ob auf der Front-End-Seite oder in der Back-End-Logik, Daten können auf diese Weise angehängt werden, um umfangreichere und praktischere Funktionen zu erreichen.
Ich verwende Echo, um eine einfache Rest-API zu erstellen. Ich habe eine Variable, die die folgende Karte ist, basierend auf dieser Struktur, die ich erstellt habe:
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{} )
Wie sende ich nach dem Erstellen einer neuen Checkliste und dem Anhängen an die Checklistenvariable eine Anfrage zum Anhängen einer neuen Zeile im Feld „Zeilen“ der neuen Checkliste?
Die Lösung, die mir eingefallen ist, ist diese:
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) }
Wenn ich diesen Handler jedoch teste, liefert er die folgenden Ergebnisse:
// 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":[]}}
Die Funktion funktioniert also nicht wirklich, da das Pingen des Beitrags an die entsprechende Route weder die erwartete Antwort zurückgibt noch die Zeile tatsächlich zum Feld hinzufügt.
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) }
Probieren Sie es jetzt aus:
$ curl -X POST -H 'Content-Type: application/json' -d '{"lines": ["test123"]}' localhost:1234/checklist/1
(Hinweis "test123"
in Klammern eingeschlossen)
Das obige ist der detaillierte Inhalt vonÜber eine HTTP-Anfrage an die vorhandene Liste anhängen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!