Desarrollo de software Web, API, ORACLE, Qlikview, BI

Contiene información que en algún momento me fue útil en desarrollo de software conceptos Web, ORACLE, Qlikview, linux, Kettle,Extjs, java y bases de datos

martes, 5 de abril de 2022

REST

Que es un API?

Un conjunto de metodos claramente definidos  para comunicar varios componentes


Web API 

  • Debe ser agnostica
  • Usa protocolos estandar http
  • Una aplicacion web que quiere usar un api web

 

Estructura de un Request

Method URLHEADERS BODY

POST https://maryitsvapicourse.free.beeceptor.com/api/v1/order
200
579 ms
POST /api/v1/order HTTP/1.1
Content-Type: text/plain
User-Agent: PostmanRuntime/7.29.0
Accept: */*
Postman-Token: 98f692ca-28df-4964-a466-af587d73fd43
Host: maryitsvapicourse.free.beeceptor.com
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 115
 
{
"order": {
"orderDate":"21.01.2018",
"orderUser":"4",
"totalCost":"200"
}
}
 

 

Estructura de un Response

 STATUS HEADERS BODY

HTTP/1.1 200 OK
Date: Mon, 04 Apr 2022 19:17:41 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Origin: *
Vary: Accept-Encoding
 
{ "status": "Awesome!"}


Actions

GET: retorna informacion de uno o varios recursos, recibe los parametros en la url

POST: agrega recursos, recibe los parametros en el body

PUT: actualiza los recursos, recibe los parametros en el body

DELETE: elimina los recursos, recibe los parametros en la url

PATCH: actualizacion de recursos parciales, similar a PUT

HEAD: similar a get pero sin body en la respuesta, sirve para hacer un precheckeo

OPTIONS: describe la disponibilidad de los verbos en una url.

 

 Como crear una url de un servicio REST

  • Debe explicarse por si sola
  • Debe ser consistente en el API
  • Debe ser predecible
  • Incluir la palabra API
  • Incluir el numero de la version 
  • Incluir el nombre de la entidad
  • Incluir la subentidad si aplica
  • Incluir los parametros si aplica

ejemplo:

https://www.myapp.com/api/v1/order/21/items?user=ana&date=21012018

Nombre del dominio 

Puede tener la palabra api en el dominio o en la url ejemplos:

https://api.myapp.com
https://www.myapp.com/api

Nombre del producto(opcional)

En algunos casos se puede usar el product nam, un agrupador de varias entidades
https://api.myapp.com/music/v1
 

Versionamiento

Si estamos usando versiones usar numeros naturales positivos, no usar flotantes, puede ir en la url, en los headers o como parametro en la url.

https://api.myapp.com/v1
https://www.myapp.com/api/v2


Entidad

Se trabaja con entidades o recursos

No usar nunca un verbo o nombres de metodos

Usar una sola palabra que se descriptiva

https://www.myapp.com/api/v2/order

 Nota: que pasa si lo que queremos accederno es una entidad, o es una accion relacionada con una entidad? En ese caso podemos usar el verbo o el verbo y la entidad con la que se relaciona

https://api.spotify.com/v1/search?query
https://api.uber.com/v1.2/estimates/prices

 

Id parameter

Cuando estamos manipulando una entidad especifica se puede poner en la url, lo usamos con get put o delete

https://www.myapp.com/api/v2/order/21

 

Subentidades

Entidades que dependen de otras entidades, ejemplo Obtener los items de la orden 17

https://www.myapp.com/api/v2/order/21/items

Que no se debe hacer https://www.myapp.com/api/v1/itemsInOrder/17

 

 

Response code

GET 

200 ok (por defecto)

400 bad request

401/ 403 no estan autorizados

404 no encontrado

 

POST

200 ok

201 creado (la entidad fue creada y retorna la entidad)

202 acceptado ( el request fue acceptado y esta siendo procesado, por ejemplo)

204 no content (el request fue completado pero no envia contenido de regreso)

400 bad request

401/ 403 no estan autorizados

404 no encontrado

 

PUT

200 ok

202 acceptado ( el request fue acceptado y esta siendo procesado, por ejemplo)

204 no content (el request fue completado pero no envia contenido de regreso)

400 bad request

401/ 403 no estan autorizados

404 no encontrado

 

DELETE

200 ok

400 bad request

401/ 403 no estan autorizados

404 no encontrado

 

Para los errores 4XX

400 Bad request

El cliente envio mal los datos, por ejemplo parametros invalidos o el json no es valido

rfc7807
hay un estandar de como se deben devolver los errores del api

{
   "tipy":"validation-error",
   "title":"parameters not valid",
   "invalid-params":[
      {
         "name":"age",
         "reason":"must be positive integer"
      },
      {
         "name":"color",
         "reason":"must be positive integer"
      }
   ]
}

 

401 unauthorized

El cliente no esta autorizado a acceder la entidad
autorizacion es requerida



403 forbidden

El cliente no esta autorizado para acceder a la entidad


404 not found

El recurso que estamos buscando no fue encontrado

5XX Internal server error

Algo sucedio mientras se procesaba el request y no se completo el request
el cliente no puede hacer nada al respecto.
Es recomendado en caso de errores no controlados como este no dar pistas de que esta sucediendo al cliente.

Performance

Asegurese de establecer rate limit y cuota, si es posible use cache y asincronismo.

Use operaciones asincronas

ejemplo in node js
para acceso a archivos, acceso a network, acceso a base de datos y operaciones que se demoren mucho es recomendable usar el async await


const fetch = require('node-fetch');

// dado que la funcion es asincrona se sigue ejecutando el codigo despues del llamado a la funcion
// sin embargo internamente el codigo espera a tener a res para continuar con data
async function asynajaxawait(){
  const res = await fetch('https://api.github.com/users/KrunalLathiya')
  const data = await res.json();
  console.log(data.name);
}

asynajaxawait();
console.log("continue")

Use cache

Almacene los datos que son accedidos de manera frecuente cerca al api usualmente en memoria
asegurese de configurar la expiracion y la invalidacion

Rate limit

Limite el numero de request que puede procesar el api
cuando se supere el limite envie un codigo de error que indique que el servidor esta muy ocupado
pero que el servidor permanezca arriba

Quota

limite el numero de request que un cliente especifico puede hacer
ejemplo
10 queryes por segundo por ip
50.000 querys por proyecto

Monitoreo

Las herramientas de monitoreo te permiten ver problemas antes de que ocurran
o en caso de que ya hayan ocurrido te permiten revisar que paso.
 

Cual es el costo de un downtime? 

Cuantos usuarios estan usando la aplicacion?

Que estan haciendo en la aplicacion?

Que monitorear

  • Cuantos request por segundo tienen las apis?
    # de fallos?
  • Latencia? el tiempo que toman un request en devolver los datos
  • CPU? cuanto de cpu estamos usando?
  • # de usuarios?
  • # de sessiones?
  • Cuanto de ram estamos usando?



Herramientas de monitoreo

Utilice una herramienta para monitorear sus APIS, ejemplo

azure service
application insight
add
availability
add test
configure the url
test every 5 minutes
success
validate the status code

Hateoas

cada rest devuelve todos los recursos que necesita
cada cliente no necesita tener mas conocimientos de otros recursos

ejemplo:
una lista de usuarios que tiene ordenes
el api de usuarios debe devolver todo los usuarios y las ordenes

https://netflix.github.io/genie/docs/3.0.0/rest/#_response_4


Bajo acoplamiento de servicios

Como evitar la telaraña de dependencias entre servicios
usar un directorio de paginas amarillas, se le pregunta al directorio cual es la url para que recurso  (on premise)
usar un api gateway (cloud), usar un hombre en el medio, el servicio A le pregunta al gateway por un recurso y el gateway se lo da


Documentacion

Asegurese de hacer buena documentarion ejemplos swagger o open api


6 Design Rules Restfull

  • Client - server: el cliente debe ser independiente del servidor, deben estar separados en distintos servicios
  • Interfaz uniforme: uso contratos bien definidos, los metadatos deben ser descriptivos (host, content type, http status), las entidades deben ser claras en la url( /cars, /employee/12), links a las entidades adicionales que se necesitan HATEOAS, representacion del los recursos que retorna( car id=123, model=xs, make=BMW)
  • Sin estado: el servidor no maneja el estado
  • Cache: el servidor usa http headers para cachear respuestas 
  • Capas: cada capa debe ser independiente, ejemplo : capas: client app, load balancer, api reset, database
  • Codigo bajo demanda:(opcional) el cliente puede enviar codigo para ser ejecutado en el servidor




Links que puedes usar

https://beeceptor.com/ crear api mock

https://petstore.swagger.io/#/pet/findPetsByStatus explorar api de ejemplo de swagger

https://swagger.io/tools/swagger-inspector/ generar documentacion usango el swagger inspector

https://www.postman.com/ probar el api



 

 

 

 

 

 

 




 




 





 

 

 

 



 

mi resumen de lo aprendido en https://www.udemy.com/course/rest-api-design-the-complete-guide/

Publicado por nastf en 15:28 No hay comentarios:

miércoles, 29 de diciembre de 2021

Web performance resumen

 


  • FCP: first contentful paint
  • LCP: largest contentful paint
  • CLS: cumulative layout shift
  • FID: first input delay


Tecnicas para mejorar la carga de tu pagina


Mejorar el tiempo del FCP

mantiene el usuario y la infraestructura mas cerca mejora el fcp
usar un cdn para garantizar que tenemos una copia cerca del usuario y que tenemos
cacheado, cloudflare, aws cdn

Mejorar el LCP

  • optimiza las imagenes
  • reduce los llamados al api
  • aplazar la carga de cosas que no se necesitan

Carga de scripts:

<script async> el decorador async nos ayuda a cargar las cosas luego, pero hay que
tener cuidaddo porque al async ejecuta las dependencia apenas descarga el recurso.

<script defer> el decorador defer le dice descarguelo pero no lo ejecute hasta
despues del lcp que este todo cargado

Carga de imagenes

Tener carga perezosa
<img loading="lazy"> sin embargo loading no funciona en safari, en este caso se puede
usar alguna libreria para cubrir el caso de safari

Configurar diferentes imagenes para diferentes resoluciones
<img
src="pict-1220.jpg"
srcset="pict-600.jpg 600w, picture-900.jpg 900w"
sizes="(max-width: 600px ) 600px, (max-width:900px) 900px, 120px">


Tener recursos cacheados:
cache-control: max age=600 //seconds
si estamos usando font o usamos @import en nuestros archivos de estilos podemos decirle
al navegador con tiempo que precarge contenidos que vamos a necesitar en el futuro
<link rel="preconnect" href="https://fonts.gstatic.com">


Mejorar el CLS

No cargar mas y mas cosas cuando estamos haciendo scroll hacia abajo, 
en su lugar se puede usar un boton cargar mas al final de la pagina, o un paginador


mi resumen de lo aprendido en https://frontendmasters.com/courses/web-perf/

Publicado por nastf en 15:35 No hay comentarios:

martes, 10 de febrero de 2015

Como instalar django python en windows


Pasos guias

Instalar python
  1. Primero descargue el python de la pagina de proyecto https://www.python.org/downloads/windows/
  2. Ejecute el archivo que acabo de descargar y listo ya quedo el python
  3. Cree las variables de entorno necesarias para poder acceder desde cualquier lugar de nuestro windows a los ejecutables que necesitemos, ( ir a panel de control -> sistem -> configuración avanzada del sistema -> variables de entorno y en variables del sistema buscamos path, le damos a editar y al final añadimos las siguientes.)
       ;C:\Python27;C:\Python27\Scripts

 Instalar django

  • Descargue el proyecto de django de la pagina https://www.djangoproject.com/download/ o puede descargar la ultima version directamente de https://github.com/django/django.git
  • Cuando termine de descargar descomprima el archivo y abra una consola cmd y vaya a la ruta de la carpeta descomprimida
         cd Download\django\
         dir 
         python setup.py install
  • Cuando termine la instalaciòn ubiquese por cmd en la carpeta del proyecto y ejecute por cmd el siguiente comando
     django-admin.py startproject nombredesuproyecto
 
     El comando crea una estructura como la siguiente:
     nombredesuproyecto/
       manage.py
       nombredesuproyecto/
          __init__.py
          settings.py
          urls.py
          wsgi.py 
 
 

Creando la primer aplicaciòn


Publicado por nastf en 19:38 No hay comentarios:

jueves, 6 de noviembre de 2014

Instalación de tcpdf en symfony 2.4

Hola a todos,

Aqui les dejo una guia paso a paso para instalar y realizar un pdf sencillo con symfony 2.4 y TCPDF

Para hacer pdf s en symfony 2.4, podemos utilizar la librería TCPDF , mediante el bundle WhiteOctoberTCPDFBundle.

Breve descripción del contenido

Los pasos para instalar el bundler son:
0. Instalar el composer (opcional, solo para los que no lo tienen instalado).
1. Agregar al composer.json la dependencia de nuestra aplicación al bundle.
2. Descargar el bundle mediante composer.
3. Revisar que la librería haya quedado descargada en el vendor.
4. Habilitar el bundle en el appkernel. (una vez habilitado ya lo puedes usar).

Ejemplo:
5. Hacer un controlador que utilice la librería.
6. Configurar el routing.
7. Visualizar el pdf.


Paso 0: Instalar el composer


En una consola de comandos digitar

maryit@..ubuntu$ curl -s https://getcomposer.org/installer | php

Una vez haya terminado de descargar, validamos que hay quedado instalado ejecutando el siguiente comando.

maryit@..ubuntu$ php composer.phar



Paso 1: Agregar dependencia 


Abrir el archivo composer.json ubicado en la carpeta raiz del proyecto y agregar en la sección require la dependencia al bundle

"require": {
        ...
        "whiteoctober/tcpdf-bundle": "dev-master"
    },




Paso 2: descargar bundle mediante composer update

Ahora vamos a una consola de comandos

 maryit@..ubuntu$ sudo  php composer.phar  update

a este comando le debemos dar unos 3 o 5 minutos para que descargue todas las dependencias



Paso 3:Validar que el bundle esta en la carpeta vendor

Una vez halla terminado el comando anterior vamos a la carpeta vendor ubicada en la raiz del proyecto y ubicamos visualmente la carpeta con el nuevo bundle.




Paso 4: Habilitar el bundle en el kernel


Vamos a la carpeta app y abrimos el archivo AppKernel.php e incluimos una instancia de WhiteOctoberTCPDFBundle

public function registerBundles()
    {
        $bundles = array(
            ...
            new WhiteOctober\TCPDFBundle\WhiteOctoberTCPDFBundle(),
        );

        if (in_array($this->getEnvironment(), array('dev', 'test'))) {
            ...
        }

        return $bundles;
    }


Listo ya esta instalada y lista para usar, veamos un ejemplo

Paso 5: Implemente un controller


Cree un controlador que implemente un método que devuelva un pdf , a continuación un ejemplo:



Paso 6: Incluya dentro del routing el nuevo método

Vaya  a su archivo rounting.yml ubicado en la ruta
carpetaproyecto/src/app/bundle /resources/config/rounting.yml

Paso 7: Visualice el pdf en un navegador


Vaya a un navegador  y realice un acceso llamando al método definido en el routing, en mi caso:
http://localhost/empleo/web/app_dev.php/imprimirHVPdf




!!!Listo!!!
Publicado por nastf en 21:06 2 comentarios:
Etiquetas: composer, configurar, ejemplo, instalar, symfony, tcpdf, whiteoctoberTCPDFBundle

sábado, 11 de octubre de 2014

Como ver si me alcanza el puntaje del icfes para entrar a univalle

Hola ,

Les escribo como hacerlo puesto que me costo algo de tiempo encontrar donde revisaba si me alcanzaba o no el puntaje del icfes.

1.Ingresar a la pagina de la universidad http://www.univalle.edu.co/

2.Entrar a la parte derecha en la opción de admisiones y registro y pon el mouse sobre la opción  para que te aparezca la opción de admisiones.



3. En la pagina de admisiones seleccionar la opción de pregrado.


4.En la parte de abajo se despliega un menu. Seleccionar primer semestre.


5.En la pagina de admisiones primer semestre seleccionar oferta de programas académicos para ver los programas que estarán disponibles el próximo semestre


6.Selecciona el programa académico de tu interés


7.Lee que porcentajes se necesitan y cual es el puntaje mínimo que se necesita para aplicar a la carrera.

Listo, suma el resultado de tus puntajes, ten en cuenta que porcentaje de eso tiene cada uno de los items.

Publicado por nastf en 10:22 No hay comentarios:
Etiquetas: admisiones, icfes, inscripciones, puntaje, univalle

sábado, 6 de septiembre de 2014

Sencha CMD: Como instalar Sencha CMD en ubuntu linux

Sencha CMD es una herramienta que nos permite organizar nuestro código javascript Extjs para el desarrollo Fron End(FE) utilizando el patrón de diseño Modelo Vista Controlador  (MVC)

Algunas de las ventajas
  • Generar la estructura del proyecto.
  • Generar código automático.
  • Empaquetar el proyecto en un solo javascript.
  • Js Compiler Vuelve mas eficiente y rápido nuestro código.
Esta guía contiene
0.Preparación del ambiente
1.Instalación Sencha CMD
2.Creación de una aplicación

0.Preparación del ambiente

Para instalar el sencha cmd requerimos de ruby, apache ant y java version suberior a 1.7

  • Instalar Java
maryit@gaea-desktop-ubuntu:~$ sudo apt-get install openjdk-7-jre
maryit@gaea-desktop-ubuntu:~$ sudo apt-get install openjdk-7-jdk 
  • Instalar Ruby

maryit@gaea-desktop-ubuntu:~$sudo apt-get install ruby
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias      
Leyendo la información de estado... Hecho
ruby ya está en su versión más reciente.
Los paquetes indicados a continuación se instalaron de forma automática y ya no son necesarios.
  firefox-locale-es linux-headers-3.13.0-29 linux-headers-3.13.0-29-generic
  linux-headers-3.13.0-32 linux-headers-3.13.0-32-generic
....


  • Instalat Ant
maryit@gaea-desktop-ubuntu:~$sudo apt-get install ant
sudo] password for maryit:
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias      
Leyendo la información de estado... Hecho

....


1. Instalación Sencha CMd

1.1.Descargar la herramienta


Para esto vamos la pagina de sencha y lo buscamos en la opcion de productos en Tools o vamos a el siguiente link
http://www.sencha.com/products/sencha-cmd/


1.2.Escogemos el que vallamos a descargar dependiendo de nuestro sistema operativo en mi caso Linux de 64


1.3.Luego abrimos nuestra terminal de comandos y des-comprimimos el archivo

maryit@gaea:~$ ls SenchaCmd-5.0.0.114-linux-x64.run.zip
SenchaCmd-5.0.0.114-linux-x64.run.zip


maryit@gaea:~$ unzip SenchaCmd-5.0.1.231-linux-x64.run.zip

Archive:  SenchaCmd-5.0.1.231-linux-x64.run.zip
  inflating: SenchaCmd-5.0.1.231-linux-x64.run


1.4.Damos permisos de ejecución al archivo
maryit@gaea:~$ chmod +x SenchaCmd-5.0.1.231-linux-x64.run
maryit@gaea:~$ ./SenchaCmd-5.0.1.231-linux-x64.run


1.5.Luego se desplegara el instalador:






2.Creación de la aplicación


2.1 Creamos un directorio y nos ubicamos dentro de el

$mkdir aplicacion_sencha
$cd aplicacion_sencha

2.2. Utilizamos el sencha cmd para crear la estructura del proyecto

$sencha generate app -ext MyApp ./MyApp


 2.3. Cuando el comando termina sencha ya ha creado toda la estructura del proyecto.

 2.4 Vemos mediante el navegador el primer despliegue del proyecto
$sencha app watch

 2.5. Ahora podemos ver en nuestro navegador el despliegue, mediante http://localhost:1841/

Nota: si cuando lo estas tratando de instalando te aparece
SenchaCmd-5.0.1.231-linux-x64.run: 1: SenchaCmd-5.0.1.231-linux-x64.run: Syntax error: "(" unexpected

Es cuestión de que des permisos de ejecución al archivo, yo use la consola
chmod +x SenchaCmd-5.0.1.231-linux-x64.run


Publicado por nastf en 19:01 No hay comentarios:
Etiquetas: ant, extjs, java, jre, linux, ruby, sencha cmd, ubuntu

miércoles, 3 de septiembre de 2014

PDI Kettle: Como instalar Pentaho Data Integration primeros pasos con spoon

En esta guía vamos a descargar la herramienta de pentaho PDI y a iniciarla, para poder empezar a trabajar con esto.

Lo primero que se debe hacer es descargar el jdk e instalarlo, en el siguiente link encuentran como hacerlo.
http://maryitsv.blogspot.com/2014/09/javaguia-para-instalar-jdk-en-windows.html

1.Vamos a la pagina de la comunidad y lo descargamos http://community.pentaho.com/projects/data-integration/ el botón de descarga se encuentra al final de la pagina y dice download.


2.El botón anterior nos lleva a una pagina y empieza a descargar el pdi.


3.Una vez haya descargo lo ubicamos en la carpeta definitiva en la que queramos ejecutarlo, en mi caso en el disco D:\ , descomprimimos el archivo con click derecho extraer aqui.


4.Cuando este descomprimido el va a crear una carpeta que se llama data-integration, entramos a la carpeta y ubicamos un archivo que se llame Spoon.bat, ejecutamos el archivo con doble click.


Te aparecerá un mensaje de tips, puedes desselecionar el check para futuras ocasiones.


5.Ya esta lista la herramienta ya puedes empezar a trabajar, con PDI.

Publicado por nastf en 13:29 1 comentario:
Etiquetas: correr, descargar, instalar, kettle, pdi, pentaho ejecutar, spoon
Entradas antiguas Inicio
Suscribirse a: Entradas (Atom)

Archivo del blog

  • ▼  2022 (1)
    • ▼  abril (1)
      • REST
  • ►  2021 (1)
    • ►  diciembre (1)
  • ►  2015 (1)
    • ►  febrero (1)
  • ►  2014 (18)
    • ►  noviembre (1)
    • ►  octubre (1)
    • ►  septiembre (4)
    • ►  agosto (12)
  • ►  2011 (4)
    • ►  agosto (2)
    • ►  febrero (2)
  • ►  2008 (4)
    • ►  noviembre (4)

Datos personales

Mi foto
nastf
Ver todo mi perfil

Seguidores

Tema Sencillo. Con la tecnología de Blogger.