Nuestra primera API REST

KTaneR

Activo muy miembro
Burgués de Nodo
Noderador
Nodero
Noder
25 Oct 2019
1.351
1.778
Primero vamos a presentar lo que es esto para dummies : En definitiva es un servicio web en el lado del backend. Esta aplicación tendremos una serie de rutas/métodos configurados, que hacen ciertas funcionalidades, interacción con la base de datos, lógica, etc. que puede ser consumido mediante el protocolo http por cualquier cliente que entienda el método http. Normalmente, estas Api devuelven los datos en xml o json, aunq,ue ultimamente lo general es que lo hagan en json, porque es una información mejor organizada y que pesa menos por lo que es mas fácil enviar o recibir información en ese formato.

Es recomendable aprender a hacer api rest porque son muy desarrolladas hoy en día, ya que, por ejemplo las apps movil están muy en auge, y estas por lo general suelen consumir apis rest. Además la misma api se puede reutilizar para la app movil la aplicación web etc por lo que es muy comodo.

Bien, dada una breve explicación comenzamos, como primer paso vamos a tener que tener instalado :
java(jdk), Spring, maven o gradle (usaremos maven aqui), y en mi caso Tomcat pero vale jetty o undertow, y por ultimo un sistema de gestion de base de datos (usaremos psotgeSQL, recomiedo pgadmin para crear la base de datos y poder verla en entorno gráfico para que sea aun mas sencillo ).

Para empezar, vamos a tratar de hacerlo de la manera mas cómodo posible y que pueda hacer cualquier, asi que crearemos el proyecto en https://start.spring.io con la siguiente configuración o a gusto de cada uno.

SpringInitializr.PNG

Ahora importaremos el proyecto en nuestro ide, en mi caso Eclipse. Y deberiamos tener un pom ya configurado con las dependencias necesarias. Seguramente, os de algún tipo de error en la primera linea del pom sin nigun tipo de sentido, pues bien la manera de corregirlo, es con cualquiera de las dos formas que estan en amarillo, cambiado la version o añadiendo esa propiedad tambien en amarillo, con hacer una de las dos debería bastar.

pom.PNG

Ahora crearemos nuestra primera entidad user, aquí estamos usando anotaciones de hibernate para que por arte de magia nos cree la BD, por lo que es muy cómodo si no teneis mucha destreza haciendo todo esto de forma manual, cabe decir que la generación del id depende de SGDB que hayais escogido, algunos utilizan estrategias diferentes a psql. Esto es una versión muy básica, y recomiendo mirar las anotacinoes para las relaciones y para otras cosas que puedan hacer falta a la hora de hacer una de verdad.(añadir getters y setters que no se ven en la imagen) Vemos además que lleva la anotacion @Entity para indentificarlo como entidad(tabla)

User.PNG

Ahora procedemos a configurar el archivo example\src\main\resources\application.properties para que estas anotaciones puedan crearnos la tabla user.

aplicationproperties.PNG

Ahora si todo ha ido bien podemos ejecutar el proyecto con mvn spring-boot:run y veremos como se crea todo lo que hemos indicado con las anotaciones y se inicia la aplicacion.

cmd.PNG


tablaUser.PNG

Bien, ahora procederemos a crear el Dao de nuestro User, y el servicio. Por que separar nuestro backend en capas?
Lo que conseguimos con esto, es separar cada funcionalidad concreta (acceso a datos, logica de negocio etc), con lo que se pueden desarrollar paralelamente, y conseguimos una abstracción, que nos permite no depender de como este implementada la capa de abajo, por lo tanto si se cambia la base da datos por ejemplo solo habría que cambiar el driver o la capa y todo lo demas seguiría funcionando igual por que no saben como esta implementada esa capa, solo conocen la interfaz de funciones que pueden ejecutar de cada capa inmediatamente inferior.

DAO (data access object) : el DAO proporcionará los métodos necesarios para insertar, actualizar, borrar y consultar la información; por otra parte, la capa de negocio solo se preocupa por lógica de negocio y utiliza el DAO para interactuar con la fuente de datos.
Vemos que lleva la anotacion de spring @Repository para identificarlo como DAO

GenericDai.PNG
daojpa.PNG

Service: El servicio se encarga de todas las operaciones de la lógica de negocio llamando a a los DAOs. Aquí lo optimo sería hacer una interfaz como en el dao e implementarla sin que la capa superior tenga que saber como esta implementado el servicio. vemos la anotación @Service para que spring sepa que es un servicio.
service.PNG

Y por último vamos a crear lo que hablamos al principio, nuestras rutas/métodos que son los que consumirán los clientes.
Vemos la anotacion @RestController y RequestMapping donde indicamos la url de nuestra api.

controller.PNG

Ahora pondré unos ejemplos con postman para que veáis como se ejecuta y que funciona correctamente.

postRestman.PNG

getRestmn.PNG


getById.PNG

Para acabar dejo la estructura del proyecto para que veais como esta organizado.
proyecto.PNG

Bueno, como vemos funciona y ahora podríamos crear una aplicación web que consumiera nuestra api, después de añadirle las funcionalidades que quisieramos.
Espero que os haya gustado, y que le sirva a alguien que quiera empezar a hacer cosas de estas, no he profundizado mucho en la mayoría de cosas, pero siempre podéis buscarlas por vuestra cuenta o igual algún día subo otra parte hablando mas en profundidad sobre alguna parte o enseñando a hacer mas cosas.
 
Última edición:

cbrn

dev & social media manager
Noderador
Nodero
Noder
23 Dic 2018
947
558
vaya currada tío, que grande! muy top bro!
 
  • Love
Reacciones : KTaneR

KTaneR

Activo muy miembro
Burgués de Nodo
Noderador
Nodero
Noder
25 Oct 2019
1.351
1.778
vaya currada tío, que grande! muy top bro!
La verdad pensaba currarmelo mas pero viendo que me daba errores(chorras de esos con las prisas) y perdia tiempo y pasaban las horas pues no explique la mayoria de cosas hahahaha.
Pero muchas gracias!
 

destapeman

FUCK PUSSYS, YES BADASS
Miembro del equipo
Paladín de Nodo
Jinete de Nodo
Burgués de Nodo
Moderador
Noderador
Nodero
Noder
11 Ene 2019
3.086
4.336
pero bueno como no he visto esta joya :love::love::love:
 
  • Love
Reacciones : KTaneR

destapeman

FUCK PUSSYS, YES BADASS
Miembro del equipo
Paladín de Nodo
Jinete de Nodo
Burgués de Nodo
Moderador
Noderador
Nodero
Noder
11 Ene 2019
3.086
4.336
lo estaba buscando para pasárselo a un colega macho, ya me di por vencido y todo jajajaja gracias ktaner
 
  • Haha
Reacciones : KTaneR
Arriba Pie