В этой главе мы представим веб-программирование на Go и Json для создания веб-службы API с типами данных ответа в форме API.
package main import "encoding/json" import "net/http" import "fmt" type student struct { ID string Name string Grade int } var data = []student{ student{"E001", "ethan", 21}, student{"W001", "wick", 22}, student{"B001", "bourne", 23}, student{"B002", "bond", 23}, }
Приведенная выше структура студента используется в качестве образца элемента среза данных, хранящегося в переменной данных.
Затем создайте функцию user() для обработки конечной точки /users. В этой функции есть процесс определения типа запроса через свойство r.Method(), чтобы выяснить, является ли тип запроса Post, Get или что-то еще.
func users(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if r.Method == "GET" { var result, err = json.Marshal(data) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Write(result) return } http.Error(w, "", http.StatusBadRequest) }
Если запрос представляет собой GET (получение данных), то данные кодируются в формате JSON
используется в качестве ответа.
Оператор w.Header().Set("Content-Type", "application/json") используется для
определить тип ответа, а именно JSON. Пока r.Write()
используется для регистрации данных в качестве ответа.
В противном случае, если запрос недействителен, ответ устанавливается как ошибка с помощью
Функция http.Error().
Также настройте обработчик для конечной точки /user. Разница между этой конечной точкой и
/users выше:
Конечная точка /users возвращает все существующие выборочные данные (массив).
Конечная точка /user возвращает только один фрагмент данных, взятый из data
образец на основе его идентификатора. В этой конечной точке клиент должен отправить
также идентификационная информация искомых данных
func user(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if r.Method == "GET" { var id = r.FormValue("id") var result []byte var err error for _, each := range data { if each.ID == id { result, err = json.Marshal(each) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Write(result) return } } http.Error(w, "User not found", http.StatusNotFound) return } http.Error(w, "", http.StatusBadRequest) }
Метод r.FormValue() используется для получения данных формы, отправленных из
клиента, в этом контексте речь идет о данных ID.
С помощью этого идентификатора осуществляется поиск соответствующих данных. Если есть, то
вернулся в качестве ответа. Если его нет, то ошибка 400, неверный запрос
вернулся с сообщением: Пользователь не найден.
Наконец, реализуйте два вышеописанных обработчика.
func main() { http.HandleFunc("/users", users) http.HandleFunc("/user", user) fmt.Println("starting web server at http://localhost:8080/") http.ListenAndServe(":8080", nil) }
Запустите программу, теперь веб-сервер работает и данные можно использовать.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3