Sunteți pe pagina 1din 23

API tipo REST cuál es mi IP

API tipo REST que indica cual es la IP

API tipo REST cuál es mi IP por David Enamorado Guzmán, Yesenia Doria se distribuye bajo una Licencia Creative
Commons Atribución-CompartirIgual 4.0 Internacional.
V.1.1
Santiago de Chile - 2020
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?

Contexto
Crear una API tipo REST que consume a otra API externa de geolocalización de IP.
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?

Creación del Proyecto

Creación del proyecto

1. Nuevo Proyecto
2. Selección de la categoría del
Proyecto, se debe
seleccionar Java con Maven.
3. El tipo de Proyecto, en este
caso es un Web Application.
4. Clic en siguiente (Next)

1. Nombre del Proyecto


2. Clic en siguiente.

Como parte opcional está ingresar el


nombre del package inicial. Para este
ejemplo se utilizará el nombre
<<root>>
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?
1. selección de un servidor
de aplicaciones en este
caso se trabaja con
Payara Server.
2. Clic en finalizar. Así se
iniciará el proceso de
creación del proyecto.

Actualmente Netbeans crea 2 clases


por defecto como se muestra en la
figura. Estas clases las genera el
asistente de creación del proyecto, y
son las clases que preconfiguran una
API tipo REST.

Al nivel del paquete root se creó la


clase JAXRSConfiguration.java, en la
cual se genera la configuración inicial
de la API.

Dentro el package root se crea un


paquete adicional llamado resources
y ahí está la segunda clase o clase 2
JavaEE8Resource.java. en resources
es donde se recomienda la creación
de los nuevos recursos de la API.
Por organización se renombrará la
clase JAXRSConfiguration.java , y el
nuevo nombre será AppConfig.java.

1. Clic derecho sobre


JAXRSConfiguration.jav
2. Clic en refactor
3. Clic rename
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?
Se ingresa el nuevo nombre
(AppConfig) de la clase que tiene la
configuración de la API.

Ahora se cambiará el punto de


acceso a los recursos de la API, por
defecto el asistente crea el nombre
de <<resources>> como se muestra
marcado con la fecha y el numero 2
en la imagen.

El nuevo nombre del punto de acceso


a los recursos será <<api>>.
El resultado debe ser como se
muestra en la imagen referencial.
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?

Creación del nuevo recurso que


indicará mi IP

• Creación de
una nueva
clase Java, la
cual contendrá
el recurso de la
API.
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?
1. Se ingresa el
nombre de la
Clase Java
2. Se debe ubicar
la nueva clase
Java en el
paquete
designado para
los Recursos de
la API
(root.resource
s>)

Ubicación de la nueva
clase Java en el
paquete
root.resources la cual
contendrá el recurso
de la API.

Código Java de la package root.resources;


import javax.json.Json;
Clase import javax.json.JsonObject;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/")
public class MiIP {

@Context
HttpServletRequest request;
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?

@GET
@Path("/ip")
@Produces({MediaType.TEXT_HTML, MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON,})
public Response getMiIP() {
String miip = request.getHeader("X-Forwarded-For");
return getMyIPGenerico(miip);
}

@GET
@Path("/ip/{ip}")
@Produces({MediaType.TEXT_HTML, MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON,})
public Response getMyIPParametro(@PathParam("ip") String miip) {
return getMyIPGenerico(miip);
}

public Response getMyIPGenerico(String miip) {

if (miip == null) {
miip = request.getRemoteAddr();
}

boolean validaLocalHost = "0:0:0:0:0:0:0:1".equals(miip);

String url = "https://api.ip2country.info/ip?" + miip;

Client clienteREST = ClientBuilder.newClient();


JsonObject jsonDatosRespuestaGeo = clienteREST.target(url).request()
.get().readEntity(JsonObject.class);

/**
* Java API for JSON Processing | JSR 374 Specification
* https://javaee.github.io/jsonp/
*/
JsonObject jsonLocalHostNoAplica = Json.createObjectBuilder()
.add("api_geo", "localhost no aplica").build();

JsonObject jsonRespuesta = Json.createObjectBuilder()


.add("myip", miip)
.add("api_geo", validaLocalHost ? jsonLocalHostNoAplica : jsonDatosRespuestaGeo)
.add("request", request.getRequestURL().toString()).build();

return Response.ok(jsonRespuesta.asJsonObject()).build();
}

}
La clase creada en su
cabecera tendrá los
siguientes import.
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?
Para tener la
funcionalidad de
identificar el país de
origen de la IP, es
requerido consumir
una API externa
llamada ip2country.
https://www.ip2country.i
nfo/

Además la respuesta
donde se indica la IP
y el país del cliente
se usa la API JSON P
(https://javaee.github.io/j
sonp/) que permite
crear y procesar
objetos JSON.

El X-Forwarded-For
es la forma de
obtener la IP del
cliente cuando se usa
un Proxy o
balanceador de
carga.
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?

Nueva página Index en JSP para la API

Lo primero es eliminar el
index.html que se crea con el
proyecto.
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?
Crear una nueva página JSP

El nombre del nuevo JSP será


index
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?

Código del Index JSP <%@page contentType="text/html" pageEncoding="UTF-8"%>


<!DOCTYPE html>
<html>
<%
String miip = request.getHeader("X-Forwarded-For");
String urlBase = request.getRequestURL().toString() + "api/ip/";
if (miip == null) {
miip = request.getRemoteAddr();
}
%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
crossorigin="anonymous">

<title>Mi IP</title>
</head>
<style>
div.center{
margin-left: auto;
margin-right: auto;
text-align: center;
}
</style>
<div class="center">
<br><img src="https://cdn2.iconfinder.com/data/icons/whcompare-servers-web-hosting/50/dedicated-ip-
address-512.png" width="120" height="120" alt="ip"/>
<br>
<h1>IP: <%= miip%></h1>
<br>
<div class="card text-white bg-dark mb-3 center" style="max-width: 30rem;">
<div class="card-header center">Formas de usar la API de consulta IP</div>
<div class="card-body center">
<h5 class="card-title">Para consultar mi IP</h5>
<a href= <%=urlBase%>><%=urlBase%></a>
<h5 class="card-title">Consultar por otra IP</h5>
<p class="card-title">Ejemplo: Uso con 1.1.1.1 DNS </p>
<a href= <%=urlBase + "1.1.1.1"%> > <%=urlBase + "/1.1.1.1"%> </a>
</div>

</div>
<p>Para la Geolocalización de las IP es usado el servicio externo de deip2country </p>
</div>

</body>
</html>
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?
Imagen de referencia
del Código en
Netbeans

Al usar ejecutar en
local y utilizar localhost
en lugar de una IP es
normal que se muestre
0:0:0:0:0:0:0:1
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?
Al ejecutar el proyecto
en local y acceder por
medio de la dirección
IP de la red local
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?

Configuración del Proyecto para el


Despliegue en Heroku Cloud

Para que Heroku pueda


desplegar la aplicación
se debe tener en el
directorio raíz del
proyecto un dichero sin
extensión llamado
Procfile, dentro de este
fichero estará el
comando que usará
Heroku para iniciar la
aplicación.
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?
El nombre del fichero
debe ser Procfile y no
contendrá extensión.

Código que contendrá


el fichero Procfile, el
cual permitirá que
Heroku ejecute la
aplicación.

Contenido del Procfile:


web: java -jar --port $PORT
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?
Configurar el proyecto
para el uso de Payara
Micro
1. Clic en nuevo
2. Seleccionar la
categoría
Payara.
3. Seleccionar el
tipo de
fichero
Payara
Micro

Se puede dejar todos


los valores por default y
dar clic en Finish
(finalizar)

El aspecto del proyecto


ahora cambia y
remplaza el icono de
color azul por uno de
color naranja con figura
de un pez.

Eso indica que ahora es


un proyecto Payara
Micro
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?
1. Clic derecho
sobre el
proyecto, y
después clic.
2. Clic en
Properties
(propiedades
)

Ahora se debe
desactivar la ejecución
en el servidor de
aplicaciones Payara
Server para que se
pueda ejecutar con
Payara Micro
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?

Creación del repositorio remoto en


Bitbucket

Clic en el signo o símbolo


+ (más)

Clic en Repository
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?
Pagina para ingresar el
nombre del repositorio
de la aplicación.

En este caso para efectos


de este proyecto se
llamará apimyIP

Una vez surtido el


proceso de creación se
muestra una pagina
similar a esta, donde se
puede ver el nombre del
repositorio y pasos para
conectar el repositorio
local con el remoto que
fue creado en Bitbucket.
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?

Inicialización y conexión del repositorio


local con remoto en Bitbucket

Para inicializar el
proyecto con git, se
debe ubicar el
directorio raíz del
proyecto y ejecutar el
comando git init

Es recomendado crear
el fichero .gitignore

En este fichero se
almacena el listado de
ficheros o directorios
que se excluirán del
control de versiones.

Se agrega al index los


cambios antes que
sean confirmados
(commit).

En la imagen se
aprecia CRLF
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?
Con el comando git
status se puede ver el
estado del Branch
(rama).

En este caso se puede


observar que hay una
lista de ficheros y
directorios que están a
la espera de ser
confirmados (commit)

1. Comando que
confirma los
cambios en el
control de
versiones.
2. Indica que debe
configurar sus
credenciales

Se agrega la
configuración de mail
y nombre los cuales se
usarán para identificar
los cambios
confirmados en el
repositorio
1. Comando de
confirmación.
2. Listado de ficheros
que se agregaron
al control de
cambios.

Ahora se debe Comandos para conectar repositorio local a Bitbucket:


conectar el repositorio git remote add origin https://usrcoders@bitbucket.org/usrcoders/apimyip.git
local existente a git push -u origin master
Bitbucket
Aplicaciones
Empresariales
API tipo REST Technology
World Class
¿Cuál es mi IP?
Imagen de referencia
de la ejecución del
comando de conexión.
1. Conexión a
Bitbucket.
2. Verificación que
estén conectados.
3. Sube los
cambios locales
confirmados a
Bitbucket.

Ahora ya están
registrados los
cambios al repositorio
en Bitbucket.

S-ar putea să vă placă și