RESTful es la arquitectura de software más popular en el Internet hoy en día, debido a su clara y estricta norma, fácil de entender y ampliar, más y más sitios web se basan en él. En esta sección, vamos a saber lo que realmente es y cómo utilizar esta arquitectura en Go.
La primera declaración del concepto de REST (Transferencia de estado representacional) fue en 2000 en la tesis doctoral de Roy Thomas Fielding, quien es el co-fundador de HTTP. Se trata de una las limitaciones de la arquitectura y los principios, Nada aplicado ha esta arquitectura que denominamos RESTful.
Antes de entender lo que es el REST, tenemos que cubrir los siguientes conceptos:
-
Recursos
REST es la transferencia de estado la capa de presentación, en donde la capa de presentación es en realidad la capa de presentación de recursos.
¿Cuáles son los recursos? Una imagen, un documento o un vídeo, etc Todo esto puede ser un recurso y situado por URI.
-
Representacion
Los recursos son información específica de la entidad, que puede ser mostrado con gran variedad de formas en la capa de presentación. Para los casos, un documento TXT se puede representar como HTML, JSON, XML, etc; una imagen puede ser representada como jpg, png, etc
Usar URI para identificar un recurso, pero la forma de determinar sus manifestaciones específicas de la misma? Debe utilizar aceptar y Content-Type en encabezado de la solicitud HTTP, estos dos campos son la descripción de la capa de presentación.
-
State Transfer
Un proceso interactivo que ocurre entre el cliente y el servidor cuando usted visita un sitio web. En este proceso, algunos datos relacionados con el cambio de estado se salvan; Sin embargo, HTTP no tiene estado, así que tenemos que guardar estos datos en el lado del servidor. Por lo tanto, si el cliente quiere cambiar los datos e informar los cambios de estado del lado del servidor, tiene que utilizar alguna forma de decirle servidor.
La mayor parte del tiempo, el cliente informa servidor a través de HTTP. En concreto, se dispone de cuatro operaciones: GET, POST, PUT, DELETE, donde GET para obtener recursos, POST para crear o actualizar recursos, PUT para actualizar los recursos y DELETE para eliminar recursos.
En conclusión de explicaciones anteriores:
- (1)Cada URI reresented un tipo de recurso.
- (2)Una capa de representación para la transferencia de recursos entre clientes y servidores.
- (3)Los clientes usan cuatro funcionamiento de HTTP a los recursos de operación para aplicar "Capa de presentación State Transfer".
El principio más importante de las aplicaciones web que implementan REST es que es interactivo entre clientes y servidores son apátridas, y cada petición debe incluir toda la información necesaria. Si el servidor se reinicie en cualquier momento, los clientes no deben recibir la notificación. Además, las solicitudes pueden ser respondidos por cualquier servidor de un mismo servicio, lo cual es bueno para la computación en nube. Lo que es más, porque es sin estado, los clientes pueden almacenar en caché los datos para mejorar el rendimiento.
Otro principio importante de REST es la deslaminación del sistema, lo que significa que los componentes no tienen manera de tener una interacción directa con los componentes de otras capas. Esto puede limitar la complejidad del sistema y mejorar la independencia de lo que esta por debajo.
Figure 8.5 REST architecture
Cuando la condición de restricción de REST se aplica a toda la aplicación, que puede ser extendido a tener enormes cantidades de clientes. También redujo retraso interactivo entre clientes y servidores, la arquitectura del sistema simplificado, mejorar la visibilidad de la interacción subsistemas
Figure 8.6 REST's expansibility.
Go no tiene soporte directo para REST, porque RESTful esta basado en HTTP, por lo que puede utilizar el paquete net / http para alcanzarlo. Por supuesto que tenemos que hacer algunas modificaciones a fin de aplicar REST. REST utiliza diferentes métodos para manejar los recursos correspondientes, muchos existían aplicaciones se dicen ser RESTful, de hecho, que no en realidad no se dan cuenta de REST. Voy a poner estas aplicaciones en varios niveles depende de la implementación de métodos.
Figure 8.7 REST's level.
Por encima de la imagen se muestran tres niveles que se implementan en REST actual, no podemos seguir todas las reglas de REST cuando desarrollamos nuestras aplicaciones porque a veces sus reglas no son aptos para todas las situaciones posibles. REST utiliza todos los métodos HTTP individual con DELETE y PUT , pero en muchos casos, los clientes HTTP sólo puede enviar GET y POST de solicitudes.
- Estándar de HTML permite a los clientes enviar solicitudes GET y POST a través de enlaces y formularios no es posible enviar PUT o DELETE solicitudes sin apoyo AJAX.
- Algunos servidores de seguridad interceptar PUT y DELETE solicitudes, los clientes tienen que utilizar la POST con el fin de ponerlas en práctica. Servicios RESTful a cargo de la búsqueda de métodos HTTP originales y restaurarlos.
Ahora podemos simular PUT y DELETE añadiendo campo oculto _method
en peticiones POST, pero usted tiene que convertir en sus servidores antes de procesarlos. Mis aplicaciones están utilizando esta forma de implementar las interfaces REST; Seguro de que puede implementar fácilmente norma RESTful Ir como siguiente ejemplo:
package main
import (
"fmt"
"github.com/drone/routes"
"net/http"
)
func getuser(w http.ResponseWriter, r *http.Request) {
params := r.URL.Query()
uid := params.Get(":uid")
fmt.Fprintf(w, "you are get user %s", uid)
}
func modifyuser(w http.ResponseWriter, r *http.Request) {
params := r.URL.Query()
uid := params.Get(":uid")
fmt.Fprintf(w, "you are modify user %s", uid)
}
func deleteuser(w http.ResponseWriter, r *http.Request) {
params := r.URL.Query()
uid := params.Get(":uid")
fmt.Fprintf(w, "you are delete user %s", uid)
}
func adduser(w http.ResponseWriter, r *http.Request) {
params := r.URL.Query()
uid := params.Get(":uid")
fmt.Fprint(w, "you are add user %s", uid)
}
func main() {
mux := routes.New()
mux.Get("/user/:uid", getuser)
mux.Post("/user/:uid", modifyuser)
mux.Del("/user/:uid", deleteuser)
mux.Put("/user/", adduser)
http.Handle("/", mux)
http.ListenAndServe(":8088", nil)
}
Este ejemplo muestra lo que tienes que escribir una aplicación REST. Nuestros recursos son los usuarios, y que utilizan diferentes funciones para diferentes métodos. Aquí hemos importado un tercero paquete github.com/drone/routes
, de las que hablamos acerca de cómo implementar enrutador personalizado en los capítulos anteriores; este paquete implementado muy convenientes reglas de asignación del router, y es bueno para la implementación de la arquitectura REST. Como puede ver, REST requiere que tengas diferentes procesos de lógica para los diferentes métodos de mismos recursos.
REST es un tipo de estilo de la arquitectura, que aprendió de experiencias exitosas de WWW: sin estado, centrado en los recursos, HTTP use por completo y protocolos URI, proporciona interfaces unificados. Estos superioridad dejar reposar convertirse en estándar de servicios web más populares. En cierto sentido, haciendo hincapié en la las normas tempranas de Internet como HTTP URI y, REST es una aplicación de gran tamaño era de la Web en el servidor antes de que el retorno. Actualmente Ir Para soporte REST es todavía muy simple, mediante la aplicación de una regla de enrutamiento personalizado, podemos pensar que un método diferente para lograr diferentes mango, logrando de esta manera una arquitectura REST.