Cómo usar un servicio web de descanso para agregar un artículo a un carrito

“¿Cuál es la longitud total de una cuerda”?
Bromas a un lado … pero un poco más de información sería bueno. 🙂

¿Está preguntando cómo construir el “servicio web de descanso”, o cómo llamarlo?

Llamada: (Html ​​/ jQuery)

función AddItem () {
var productId = $ (this) .siblings (‘producto’). val ();
cantidad var = $ (this) .siblings (‘cantidad’). val ();
$ .ajax ({
tipo: “POST”,
url: “path_To_Webservice / theService.svc / AddItemToCart”,
datos: JSON.stringify ({
ProductId: pId,
Cantidad: cantidad
}),
contentType: “application / json; charset = utf-8”,
dataType: “json”,
éxito: función (datos) {
//¡Hurra! ¡Éxito!
//Hacer cosas…
},
error: función (datos) {
alert (‘Se produjo un error … bla, bla …’);
// Haz otras cosas
}
});
}

DESCANSO. (DO#)

[WebInvoke (Método = “POST”,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = “AddItemToCart”)]

cadena pública AddItemToCart (int productId, int cantidad)
{
tratar {
// La lógica del carrito de compras aquí …
volver “OK”;
}
atrapar (Excepción ex) {
// Error ocurrido – error de registro
return “¡Vaya! ¡Error!”;
}

}

Ahora, esto es muy, muy simple, y no lo he compilado o probado … pero probablemente debería funcionar. 🙂

Supongo que está hablando sobre cómo diseñar una API REST para algunas funciones del carrito.

Me imagino que necesitará un carrito “colección de recursos web”, y tiene sentido para mí exponerlo a través de URI / api / carts. Para crear un carrito, puede utilizar el siguiente ejemplo de solicitud / respuesta como punto de partida.

POST / api / carts HTTP / 1.1
Tipo de contenido: application / vnd.company-v1.0 + hal + json
Autorización: Portador mF_9.B5f-4.1JqM

{
“artículos”: [
{
“item_id”: d3e9d433-bf54-4567-b070-cb033cc27c63,
“Cantidad: 1
}
]
}

HTTP / 1.1 201 creado
Tipo de contenido: application / json

{
“cart_id”: 6e80e5ca-c684-4c86-9e4b-8088e0da9b12,
“artículos”: [
{
“item_id”: “d3e9d433-bf54-4567-b070-cb033cc27c63”,
“Cantidad: 1
}
],
“_links”: {
“self”: {
“title”: “Estás aquí”,
“href”: “/ api / carts / 6e80e5ca-c684-4c86-9e4b-8088e0da9b12 /”
},
“get_cart”: {
“title”: “Estás aquí”,
“href”: “/ api / carts / 6e80e5ca-c684-4c86-9e4b-8088e0da9b12 /”
},
“añadir a la cesta”: {
“title”: “Agregar artículos a un carrito existente”,
“href”: “/ api / carts / 6e80e5ca-c684-4c86-9e4b-8088e0da9b12 /”
},
“remove_from_cart”: {
“title”: “Eliminar artículos de un carrito existente”,
“href”: “/ api / carts / 6e80e5ca-c684-4c86-9e4b-8088e0da9b12 /”
},
“checkout_cart”: {
“title”: “Pagar un carrito existente”,
“href”: “/ api / carts / 6e80e5ca-c684-4c86-9e4b-8088e0da9b12 / pago”
}
}
}

El ejemplo anterior crea un nuevo carrito para un solo artículo con item_id d3e9d433-bf54-4567-b070-cb033cc27c63.

Los detalles del artículo no son importantes desde la perspectiva del diseño de la API.

Observe el elemento “_links” en el json devuelto en el Cuerpo de respuesta HTTP.

Estoy usando el lenguaje de aplicación hipermedia (HAL) para decirle al usuario-agente a qué otros “recursos web” se vincula este recurso. Uno de estos “recursos web” tiene la clave “add_to_cart”.

En este caso, la aplicación le dice al usuario-agente que si desean agregar otro artículo al carrito, pueden usar la ruta / api / carts / 6e80e5ca-c684-4c86-9e4b-8088e0da9b12 / en el mismo servidor.

Me imagino que podríamos diseñar este “recurso web” para tener la siguiente solicitud / respuesta HTTP

POST / api / carts / 6e80e5ca-c684-4c86-9e4b-8088e0da9b12 / HTTP / 1.1
Tipo de contenido: application / vnd.company-v1.0 + hal + json
Autorización: Portador mF_9.B5f-4.1JqM

{
“artículos”: [
{
“item_id”: “1a3d7141-1676-422d-bcd1-dbe7eb3a561c”,
“Cantidad: 1
},
{
“item_id”: “0f768f63-3953-4f7d-b30b-c61fc2b07cc1”,
“Cantidad: 2
}
]
}

HTTP / 1.1 201 creado
Tipo de contenido: application / json

{
“cart_id”: 6e80e5ca-c684-4c86-9e4b-8088e0da9b12,
“artículos”: [
{
“item_id”: “d3e9d433-bf54-4567-b070-cb033cc27c63”,
“Cantidad: 1
},
{
“item_id”: “1a3d7141-1676-422d-bcd1-dbe7eb3a561c”,
“Cantidad: 1
},
{
“item_id”: “0f768f63-3953-4f7d-b30b-c61fc2b07cc1”,
“Cantidad: 2
}
],
“_links”: {
“self”: {
“title”: “Estás aquí”,
“href”: “/ api / carts / 6e80e5ca-c684-4c86-9e4b-8088e0da9b12 /”
},
“get_cart”: {
“title”: “Estás aquí”,
“href”: “/ api / carts / 6e80e5ca-c684-4c86-9e4b-8088e0da9b12 /”
},
“añadir a la cesta”: {
“title”: “Agregar artículos a un carrito existente”,
“href”: “/ api / carts / 6e80e5ca-c684-4c86-9e4b-8088e0da9b12 /”
},
“remove_from_cart”: {
“title”: “Eliminar artículos de un carrito existente”,
“href”: “/ api / carts / 6e80e5ca-c684-4c86-9e4b-8088e0da9b12 /”
},
“checkout_cart”: {
“title”: “Pagar un carrito existente”,
“href”: “/ api / carts / 6e80e5ca-c684-4c86-9e4b-8088e0da9b12 / pago”
}
}
}

Esto debería proporcionar un esqueleto suficiente para que trabajes.

De hecho, agité un montón de cosas como negociación de contenido, autenticación, autorización, escenarios de falla, etc.

En realidad, hay muchas decisiones de diseño que debe tomar antes de comenzar a crear una API REST. En este escenario, hice suposiciones como usar HAL y JSON juntos.

En realidad, cada diseñador de API REST tomará diferentes decisiones de diseño en función de sus casos de uso.