Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología
Desarrollo de
Servicios Web 2
Tema Nº1:
TEMA 01
INTRODUCCIÓN Teoría
AL API RESTde los
TEMA de
Indicador Nº1:
logro Nº1:
Aplica los fundamentos de API Rest a través de los conceptos generales de GET,
POST, PUT, etc.
1
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología
INTRODUCCIÓN AL API REST
Subtema 1.1:
¿Qué es una API?
MARCO TEÓRICO
La abreviatura viene del término en inglés Application Programming Interfaces (Interfaces de programación de
aplicaciones), una API es una especificación formal sobre cómo un módulo de un software se comunica o interactúa con
otro.
En otras palabras, las API son un conjunto de comandos, funciones y protocolos informáticos que permiten a los
desarrolladores crear programas específicos para ciertos sistemas operativos. Las API simplifican en gran medida el
trabajo de un creador de programas, ya que no tiene que «escribir» códigos desde cero. Estas permiten al informático
usar funciones predefinidas para interactuar con el sistema operativo o con otro programa.
Por ejemplo, cuando el usuario compra entradas a través de la página web de una sala de cine e introduce la
información de su tarjeta de crédito, la web usa una API para enviar dicha información de forma remota a otro
programa que verifica si los datos bancarios son correctos. Una vez que se confirma el pago, la aplicación remota envía
la información al sitio web del cine y le da un «OK», por lo que esta página emite los tickets.
En todo ese proceso, el usuario solo ve una cara del proceso, la página del cine, pero tras bambalinas hay muchas
aplicaciones que se están comunicando gracias a las API.
API Rest
API REST llegó para quedarse, solo bastaría ver las tendencias de Google Trends para darse cuenta que REST ha
superado por creces a los servicios tradicionales SOAP y desde hace ya un tiempo.
API REST es un estilo de arquitectura de software que se utiliza para describir cualquier interfaz entre diferentes
sistemas que utilicen HTTP. Este último es un protocolo de comunicación que permite la transferencia de datos en la
web.
REST significa Representational State Transfer o en español transferencia de estado representacional, es un estándar
para la comunicación y creación de servicios para transferir información entre un cliente y un servidor. Esta
2
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología
transferencia de información, nos permitirán manipular datos a través de peticiones realizadas por el cliente hacia la
API; las cuales involucran al antes mencionado CRUD.
El CRUD tiene métodos bien definidos para realizar las operaciones, estos son los siguientes: GET para consultar, PUT
para actualizar/reemplazar, POST para crear y DELETE para eliminar.
Código de estado
Las API REST poseen otros aspectos muy importantes como el código de estado que se relaciona con el CRUD; sirve
para informar al cliente cómo fue procesada cierta petición dentro de la API. GET, POST, PUT, PATCH o DELETE, la
API responde con estos códigos que ayudan al cliente a decidir qué hacer una vez finalizada su petición. En resumen,
los códigos de estado indican si se ha completado satisfactoriamente una solicitud específica.
Los códigos de estado se agrupan en cinco tipos: respuestas informativas, respuestas satisfactorias, redirecciones,
errores de los clientes y errores de los servidores. A continuación, se enlistan algunos de los más utilizados agrupados
por tipo:
Respuestas informativas
100 Continue
Respuestas satisfactorias
200 OK
201 Created
Redirecciones
300 Multiple Choice
Errores de cliente
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
Errores de servidor
500 Internal Server Error
Desarrollar software basado en una API proporciona ventajas significativas para quien desarrolla y consume el
software, como los siguientes:
3
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología
Flexibilidad al momento de elegir el lenguaje de programación que puede ser diferente al utilizado en el
cliente.
La separación de cliente y servidor permite desarrollar proyectos de software segmentadamente y que
en su momento generan estabilidad y portabilidad a cualquier plataforma.
Es posible reutilizar servicios ya existentes desarrollados por terceros e incorporarlos a nuestro negocio;
por ejemplo, los sistemas de identificación de Facebook y la autenticación en los servicios de Google.
Por todos lo expuesto, de concluye que el uso de las API ha permitido construir relaciones con otros negocios y llegar a
muchos más clientes, por lo que se han convertido en una herramienta clave para el crecimiento de los negocios.
Subtema 1.2:
JSON
Corresponde a las siglas JavaScript Object Notation o Notación de Objetos de JavaScript, es un formato ligero de
intercambio de datos, que resulta sencillo de leer y escribir para los programadores y simple de interpretar y generar
para las máquinas. JSON es un formato de texto completamente independiente de lenguaje, pero utiliza convenciones
que son ampliamente conocidos por los programadores, entre ellos:
Java
JavaScript
Python
Entre otros
Una de las características de JSON, al ser un formato que es independiente de cualquier lenguaje de programación, es
que los servicios que comparten información por este método no necesitan hablar el mismo idioma, es decir, el emisor
puede ser Java y el receptor Python, pues cada uno tiene su propia librería para codificar y decodificar cadenas en este
formato.
Ventajas
Es autodescriptivo y fácil de entender
Su sencillez le ha permitido posicionarse como alternativa a XML
Es más rápido en cualquier navegador
Es más fácil de leer que XML
1. MATERIALES
Para la experiencia a realizar se requiere lo siguiente:
a) EQUIPO
4
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología
Se requiere tener un equipo de cómputo (PC o laptop).
b) HERRAMIENTAS
Java Developer Kit (JDK) version 8.x:
Spring Tool Suite
Apache Maven
Postman
2. PROCEDIMIENTO
Se va a crear un proyecto Spring Boot, donde se definirá los métodos GET, POST, PUT, DELETE y también se
conocerán los códigos de respuesta HTTP.
Herramienta de trabajo
Creamos el proyecto en: [Link]
Después de descomprimirlo se procede a realizar el proyecto con los siguientes paquetes:
Se procede a comentar la siguiente dependencia en el [Link] ya que la
aplicación se realizará en memoria por el momento:
5
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología
Se define la clase de ejemplo para la aplicación:
package [Link];
import [Link];
import [Link];
public class Instructor implements Serializable
{
private static final long serialVersionUID=1L;
private Integer instructorId;
private String nombre;
private String apellidos;
private String password;
private String email;
private Date fregistro;
public Instructor() {
}
public Instructor(Instructor instructor)
{
this([Link](),[Link](),[Link](),
[Link](),[Link](),[Link]());
}
public Instructor(Integer instructorId, String nombre, String apellidos, String password,
String email, Date fregistro) {
[Link] = instructorId;
[Link] = nombre;
[Link] = apellidos;
[Link] = password;
[Link] = email;
[Link] = fregistro;
6 }
//Getters and Setters
}
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología
Se procede a realizar la capa DAO:
package [Link];
import [Link];
import [Link];
public interface InstructorRepository
{
public abstract void insert(Instructor instructor);
public abstract void update(Instructor instructor);
public abstract void delete(Integer instructorId);
public abstract Instructor findById(Integer instructorId);
public abstract Collection<Instructor> findAll();
}
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Repository
public class InstructorRepositoryImpl implements InstructorRepository
{
public static Collection<Instructor> itemsInstructor=new ArrayList<>();
@Override
public void insert(Instructor instructor) {
[Link](instructor);
}
@Override
public void update(Instructor instructor)
{
Instructor oldInstructor=findById([Link]());
[Link](oldInstructor);
Instructor newInstructor=new Instructor(instructor);
[Link](newInstructor);
}
@Override
public void delete(Integer instructorId)
{
Instructor instructor=findById(instructorId);
[Link](instructor);
}
@Override
public Instructor findById(Integer instructorId)
{
Optional<Instructor> instructor=
[Link]().filter(p -> [Link]()==instructorId).findFirst();
return [Link](null);
}
7 @Override
public Collection<Instructor> findAll() {
return itemsInstructor;
}
}
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología
Se procede a realizar la capa SERVICE:
package [Link];
import [Link];
import [Link];
public interface InstructorService
{
public abstract void insert(Instructor instructor);
public abstract void update(Instructor instructor);
public abstract void delete(Integer instructorId);
public abstract Instructor findById(Integer instructorId);
public abstract Collection<Instructor> findAll();
}
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Service
public class InstructorServiceImpl implements InstructorService
{
@Autowired
private InstructorRepository repository;
@Override
public void insert(Instructor instructor) {
[Link](instructor);
}
@Override
public void update(Instructor instructor) {
[Link](instructor);
}
@Override
public void delete(Integer instructorId) {
[Link](instructorId);
}
@Override
public Instructor findById(Integer instructorId) {
return [Link](instructorId);
}
@Override
public Collection<Instructor> findAll() {
return [Link]();
}
}
8
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología
Se procede a realizar la capa CONTROLLER:
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@RestController
@RequestMapping("/instructor")
public class InstructorRestController
{
@Autowired
private InstructorService instructorService;
@GetMapping("/listar") //Http Method GET
public ResponseEntity<?> listar() {
Collection<Instructor> itemsInstructor=[Link]();
return new ResponseEntity<>(itemsInstructor,[Link]); //Http status code
}
@GetMapping("/buscar/{instructorId}") //Http Method GET
public ResponseEntity<?> buscar(@PathVariable Integer instructorId) {
Instructor instructor=[Link](instructorId);
if(instructor!=null) {
return new ResponseEntity<>(instructor,[Link]); //Http status code
}
return new ResponseEntity<Void>(HttpStatus.NOT_FOUND); //Http status code
}
@PostMapping("/agregar") //Http Method POST
public ResponseEntity<?> agregar(@RequestBody Instructor instructor) {
[Link](instructor);
return new ResponseEntity<Void>([Link]); //Http status code
}
@PutMapping("/editar/{instructorId}") //Http Method PUT
public ResponseEntity<?> editar(@PathVariable Integer instructorId,
@RequestBody Instructor newInstructor) {
Instructor instructor=[Link](instructorId);
if(instructor!=null) {
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
[Link](instructor);
return new ResponseEntity<Void>([Link]); //Http status code
}
return new ResponseEntity<Void>(HttpStatus.NOT_FOUND); //Http status code
@DeleteMapping("/borrar/{instructorId}") //Http Method DELETE
public ResponseEntity<?> borrar(@PathVariable Integer instructorId)
{
Instructor instructor=[Link](instructorId);
if(instructor!=null) {
[Link](instructorId);
return new ResponseEntity<Void>([Link]); //Http status code
9 }
return new ResponseEntity<Void>(HttpStatus.NOT_FOUND); //Http status code
}
}
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología
En el archivo [Link] definimos el path principal:
[Link]=8090
[Link]-path=/rest
Con todo lo anterior se definió los conceptos elementales de Servicios Web Rest con los métodos HTTP para
interactuar con las APIs, ahora se pasa a realizar las pruebas de testeo con POSTMAN:
Postman es una herramienta que se utiliza, sobre todo, para el testing de API REST, aunque también admite otras
funcionalidades que se salen de lo que engloba el testing de este tipo de sistemas.
Postman nos ayuda a ser más eficientes durante todo el ciclo de vida de desarrollo de una API. Hoy en día las API
RESTful están en todas partes, no importa la tematica de la aplicación, ni su tamaño.
Y al mismo tiempo son cada vez más complejas: métodos HTTP, headers, cookies, autenticación, tokens, OAuth y
mucho más.
Postman nos permite crear rápidamente solicitudes con el método HTTP necesario y parámetros en caso de necesitarlo,
enviar la solicitud e inspeccionar fácilmente los resultados.
Prueba de testeo con POSTMAN:
10
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología
Todos los resultados deben mostrar el código de estado HTTP de modo satisfactorio.
11
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología
ACTIVIDAD VIRTUAL:
a) CUESTIONARIO TÉCNICO
Revisa y analiza el tema desarrollado en la presente sesión, luego responde las siguientes preguntas propuestas:
¿Qué es una API?
¿En qué se diferencia REST con RESTful?
¿En qué rango de código de estado de respuesta HTTP se encuentran los errores de los servidores?
¿Qué ventajas tiene JSON sobre XML?
Realice una App similar aplicando todo lo aprendido de esta guía, además debe mostrar los estados de
respuesta HTTP con Postman.
b) CONCLUSIONES DE LA EXPERIENCIA
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
__________________________________________________________________________
12