¿Qué es la cabecera Content Type?
Una aplicación de servidor, puede responder con diferentes tipos de contenido (Content-Type), algunos de ellos son…
json (application/json)
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write([]byte(`{"mensaje": "Hola Mundo"}`))
xml (application/xml)
w.Header().Set("Content-Type", "application/xml; charset=utf-8")
w.Write([]byte(`<?xml version="1.0" encoding="utf-8"?><Mensaje>Hello World</Mensaje>`)
texto plano (text/plain)
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
w.Write([]byte("Hola Mundo"))
Supongamos que deseamos enviar una respuesta en base al tipo de contenido con el cual se realizo la petición en cada uno de los 3 anteriores casos.
Mediante el objeto http.Request es posible acceder al tipo de contenido de la solicitud utilizando r.Header.Get(“Accept”).
Ejemplo del uso del uso de la cabecera Content-Type en Go
package main
import "net/http"
func Home(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
switch r.Header.Get("Accept") {
case "application/json":
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write([]byte(`{"mensaje":"Hola Mundo"}`))
case "application/xml":
w.Header().Set("Content-Type", "application/xml; charset=utf-8")
w.Write([]byte(`<?xml version="1.0" encoding="utf-8"?><Mensaje>Hola Mundo</Mensaje>`))
default:
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
w.Write([]byte("Hola Mundo"))
}
}
func main() {
http.HandleFunc("/", Home)
http.ListenAndServe(":8000", nil)
}
En el anterior ejemplo hemos utilizado un switch sobre el valor de Accept, de forma que existen los tres posibles escenarios y por default se utiliza text/plain.
Ejemplos de consultas mediante curl utilizando diferentes Content Type.
En curl es posible pasar este parámetro utilizando el argumento -H.
¿Cómo hacer una petición tipo json en curl?
$ curl -is http://localhost:8000 -H 'Accept: application/json'
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Sat, 20 Apr 2019 02:06:05 GMT
Content-Length: 24
{"mensaje":"Hola Mundo"}
¿Cómo hacer una petición tipo xml en curl?
$ curl -is http://localhost:8000 -H 'Accept: application/xml'
HTTP/1.1 200 OK
Content-Type: application/xml; charset=utf-8
Date: Sat, 20 Apr 2019 02:06:30 GMT
Content-Length: 67
<?xml version="1.0" encoding="utf-8"?><Mensaje>Hola Mundo</Mensaje>
¿Cómo hacer una petición tipo text/html en curl?
$ curl -is http://localhost:8000 -H 'Accept: text/html'
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Sat, 20 Apr 2019 02:07:10 GMT
Content-Length: 10
Hola Mundo