"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Servidor API de servicio web en Go

Servidor API de servicio web en Go

Publicado el 2024-07-31
Navegar:716

Web Service Api Server in Go

En este capítulo, presentaremos la programación web go y Json para crear un servicio web API con tipos de datos de respuesta en forma de API.

  1. API de creación WEB Prepare algunos datos de muestra primero
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},
}

La estructura de estudiante anterior se utiliza como tipo de elemento de segmento de datos de muestra, almacenado en la variable de datos.
A continuación, cree una función user() para manejar el punto final /users. En esta función hay un proceso de detección del tipo de solicitud a través de la propiedad r.Method(), para saber si el tipo de solicitud es Publicar, Obtener o algo más.

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)
}

Si la solicitud es un GET (recuperar datos), entonces los datos se codifican en JSON
utilizado como respuesta.
La declaración w.Header().Set("Content-Type", "application/json") se utiliza para
determine el tipo de respuesta, es decir, como JSON. Mientras r.Write()
utilizado para registrar datos como respuesta.
De lo contrario, si la solicitud no es válida, la respuesta se establece como error usando
Función http.Error().
También configure un controlador para el punto final /user. La diferencia entre este punto final y
/usuarios arriba es:
El punto final /users devuelve todos los datos de muestra existentes (matriz).
El punto final /user devuelve solo un dato, tomado de los datos
muestra basada en su ID. En este punto final, el cliente debe enviar
también la información de identificación de los datos que se buscan

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)
}

El método r.FormValue() se utiliza para recuperar datos del formulario enviados desde
cliente, en este contexto el dato al que se refiere es DNI.
Con este ID se buscan datos relevantes. Si lo hay, entonces
devolvió como respuesta. Si no está allí, entonces se produce el error 400, Solicitud incorrecta
devuelto con el mensaje Usuario no encontrado.
Finalmente, implemente los dos controladores anteriores.

func main() {
 http.HandleFunc("/users", users)
 http.HandleFunc("/user", user)
 fmt.Println("starting web server at http://localhost:8080/")
 http.ListenAndServe(":8080", nil)
}

Ejecute el programa, ahora el servidor web está activo y se pueden consumir los datos.

Declaración de liberación Este artículo se reproduce en: https://dev.to/sukmarizki04/web-service-api-server-in-go-efl?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3