2008-09-23 41 views
7

¿Existe un patrón específico que los desarrolladores generalmente siguen? Nunca antes lo había pensado mucho en mis aplicaciones web, pero el motor de enrutamiento ASP.NET MVC te obliga a tenerlo en cuenta.¿Cómo se estructuran las rutas de URL?

Hasta ahora me ha gustado la estructura del controlador/acción/índice (por ejemplo, Productos/Editar/1), pero estoy luchando con URL más complejas.

Por ejemplo, supongamos que tiene una página que enumera todos los productos que un usuario tiene en su cuenta. ¿Como lo harias? De la parte superior de mi cabeza puedo pensar en las siguientes posibilidades para una página del anuncio y una página de edición:

  1. usuario/{id de usuario}/Productos/Lista, Usuario/{id de usuario}/Productos/Editar/{Identificación del producto}
  2. usuario/{id de usuario}/Productos, usuario/{id de usuario}/Productos/{id producto}
  3. productos? UserID = {id de usuario}, los productos/Editar/{product id}

Estoy seguro de que hay muchas otras que me estoy perdiendo. ¿Algún consejo?

Respuesta

7

Me gustan las URL RESTful, fáciles de usar y pirateables.

¿Qué significa esto? Vamos a comenzar con fácil de usar URLs. Para mí, una URL fácil de usar es algo fácil de escribir y fácil de recordar. /Default.aspx?action=show&userID=140 no cumple con ninguno de estos requisitos. Sin embargo, una URL como `/ users/troethom' parece lógica.

Esto lleva al siguiente punto. Una URL hackeable es una URL que el usuario puede modificar y aún así obtener un resultado. Si la URL es pirateable y la URL de mi perfil es /users/troethom, sería seguro eliminar mi nombre de usuario para obtener una lista de usuarios (/users).

Usando URLs RESTful es bastante similar a las ideas detrás de mis otras sugerencias. Está diseñando URL para un usuario y no para una máquina y, por lo tanto, la URL debe relacionarse con el contenido y no con el backend técnico de su sitio. Una URL como '/ users' tiene más sentido que '/ users/list' y una URL como '/ category/programming/javascript' (que representa la subcategoría 'javascript' en la categoría 'programación' es mejor que '/ category/show/12'.

de hecho, es más difícil de omitir identificaciones, pero en mi mundo vale la pena el esfuerzo.

consultar también the Understanding URIs section en W3C's los problemas de aplicación HTTP comunes.Tiene una lista de dificultades comunes al diseñar URI. Otro buen recurso es Resourceful Vs Hackable Search URLs.

1

Además, puede considerar el uso de verbos diferentes para reutilizar las mismas rutas para diferentes acciones. Por ejemplo, una solicitud GET a "Productos/Edición/45" mostraría el editor del producto, mientras que una POST a la misma URL actualizaría el producto. Usted puede utilizar el atributo AcceptVerb de lograr esto:

[AcceptVerb("GET")] 
public ActionResult Edit(int id) 
{ 
    ViewData["Product"] = _products.Get(id); 
    return View(); 
} 

[AcceptVerb("POST")] 
public ActionResult Edit(int id, string title, string description) 
{ 
    _products.Update(id, title, description); 
    TempData["Message"] = "Changes saved successfully!"; 

    return RedirectToAction("Edit", new { id }); 
} 
0

Para añadir a los comentarios de troethom, REST general también significa que, por ejemplo, para crear un nuevo usuario que pondría una representación a/usuarios/newusername

REST utiliza básicamente los 5 métodos estándar HTTP (GET, PUT , POST, DELETE, HEAD) para controlar/acceder al contenido.

Ok, esto no es fácil para un navegador web, pero siempre se puede utilizar el poste sobrecargada (post a/usuarios/nombre de usuario con una representación de un usuario para cambiar algunos de los detalles, etc.

Su una buena manera de hacer las cosas, me gustaría recomendar la lectura de RESTFul Web services para obtener una mejor comprensión: D (y es un buen libro maldito!)

Cuestiones relacionadas