java - sendredirect - Servlet vs REST
servlet sendredirect to servlet (7)
Necesito crear 5 métodos en el lado del servidor, que funcionarán con datos binarios. Los clientes remotos son applet y JavaScript. El Cliente enviará archivos al servidor, y el servidor debe analizar estos archivos y luego devolver la respuesta como XML / JSON.
Entonces, estoy confundido: ¿es una buena práctica usar el servicio REST en este caso? ¿O debería usar un servlet?
Mi colega me dijo:
"Crear un servicio REST que será utilizado solo por una Aplicación no es bueno. REST debe crearse solo cuando sea utilizado por muchas aplicaciones. Y REST tiene algunas desventajas con respecto a servlet: REST es más lento que Servlet; es más difícil escriba REST seguro para subprocesos que el servlet "
Sin embargo, veo algunas desventajas con el uso de Servlet: necesito enviar un nombre de función que deseo llamar (es decir, como nombre de función de envío de parámetro HTTP adicional) y luego, dentro del método doPost
, realizar el siguiente cambio:
switch(functionName) {
case "function1":
function1();
break;
case "function2"
function2();
break;
//.... more `case` statements....
}
En caso de REST, puedo usar URLs diferentes para diferentes funciones. Además, en el caso de REST, es más conveniente devolver JSON / XML del servidor.
Gracias.
Aquí está el enlace similar. lo ha hecho con servlet simple http://software.danielwatrous.com/restful-java-servlet/
Bueno, no estaría de acuerdo con la opinión de sus colegas de que no es bueno que una sola aplicación use el descanso, ya que puede decidir en el futuro tener diferentes aplicaciones usando la misma API de descanso. Si yo fuera tú, elegiría el RESTO puro. ¿Por qué?
Si está utilizando algún marco para la implementación de reposo (digamos apache cxf o jersey ) obtiene muchas cosas de la caja: escribe POJO, obtiene un descanso, obtiene serialización y deserialización, desde y hacia, digamos, objeto JSON fuera de la caja (eventualmente tendrá que implementar algunos JsonProviders pero esto no es gran cosa).
Es intuitivo para trabajar (si diseñas bien tus API de descanso).
Consumibles muy fáciles para los clientes de JavaScript (especialmente si está usando JQuery o algo así)
Sin embargo, depende en gran medida de qué es exactamente lo que quiere hacer, si tiene una fuerte lógica transaccional, el resto podría ser bastante complicado. Si solo va a realizar solicitudes POST (sin utilizar otros métodos HTTP), es posible que desee utilizar el servlet, ya que no tendrá que trabajar con marcos adicionales y crear más dependencias. Tenga en cuenta que el REST es más o menos un concepto arquitectónico y no está en contradicción con la tecnología Servlet. Si es lo suficientemente obstinado, puede hacer una pausa api solo con servlets :-). Espero haber ayudado.
Dependiendo de la versión de su contenedor, Jersey (o cualquier otra implementación de JAX-RS) seguirá utilizando un servlet para enviar solicitudes al controlador apropiado.
Si su aplicación es realmente RESTful, entonces JAX-RS hará lo que usted desee. De lo contrario, considere usar FrontController para interpretar la solicitud y reenviarla al controlador apropiado.
Además, no confunda XML o JSON con REST. Obtendrá estos de forma gratuita en la mayoría (si no en todas) las implementaciones de JAX-RS, pero estas implementaciones aún delegan la clasificación de contenido en otras bibliotecas (por ejemplo, JAXB).
Estás confundiendo dos paradigmas aquí:
- REST es un "estilo" de arquitectura de software;
- Servlet es una tecnología del lado del servidor.
Puede, por ejemplo, implementar servicios similares a REST usando Servlets.
No puedo ver ningún problema al usar Jersey y crear un servicio REST. Sé que soy un REST-taliban, pero es realmente sencillo implementar este tipo de arquitectura con JAX-RS, así que ... ¿por qué no?
Sus colegas dicen: "REST debe crearse solo cuando lo usen muchas aplicaciones", pero no veo cómo puede ser cierto. ¿Por qué no puedo crear un servicio REST para una sola aplicación?
Parece que su colega está aplicando una optimización prematura. Si puede escribirlo rápidamente en una biblioteca JAX-RS, hágalo ... Si luego resulta ser el cuello de botella solo entonces, tómese el tiempo para volver a escribir como servlet.
En mi experiencia, la sobrecarga de rendimiento de JAX-RS no es lo suficientemente grande como para justificar la sobrecarga de desarrollo y mantenimiento de escribir el equivalente en servlets directamente donde el problema se corresponde bien con JAX-RS
Primero, estás hablando en términos de dos paradigmas diferentes. Es un poco de manzanas y naranjas.
REST es un estilo de servicio que usa operaciones HTTP (GET, PUT, etc.) para leer y escribir el estado de los recursos. Piense en los recursos como "sustantivos" y "cosas".
Servlet, por otro lado, es una especificación de software proporcionada originalmente por Sun Microsystems para conectar solicitudes HTTP a código Java personalizado. Los servlets a menudo hablan en términos de llamadas a métodos: "verbos" y "acciones".
Dado que su pregunta implica que usted está tratando de manejar los métodos input-> output, solo un servlet simple debería hacer el trabajo.