Skip to content

API para utilizar como backend del proyecto de Programación avanzada II

Notifications You must be signed in to change notification settings

FRMDP/newspaper-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Newspaper-api

API Rest desarrollada con Spring boot data-rest y data-jpa que se utilizara como backend en Programación Avz II.

Esta API hace uso de HATEOAS y expone los siguientes endpoints:

  • /reporters
  • /categories
  • /news

Informacion sobre los rest repositories de spring, responses de codigos http y verbos disponibles.

Opciones para hacer uso de la API localmente

Docker:

Este proyecto se puede ejecutar dentro de un container utilizando Docker, de la siguiente forma:

Lista de comandos: cheatsheet

  1. Instalar Docker en nuestro sistema:

  2. Buildear el proyecto:

    • Como hacemos uso de MySQL como base de datos, necesitamos tener instalada la misma. Con docker esto es facil:

        docker run --name mysql-db -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=newspaper_db -p 3306:3306 -d mysql:latest
      
    • Una vez que nuestro container de MySQL este corriendo, lo podemos verificar con el comando "docker ps", estamos listos para buildear el proyecto. Generalmente es necesario tener instalado Maven, pero Spring boot nos provee un wrapper del mismo para poder buildear sin necesidad de tener maven instalado. Ubicados sobre el directorio del proyecto, podemos ver los archivos mvnw y mvnw.cmd . Un paso adicional para aquellos que esten con Linux es modificar el archivo application.yml bajo el directorio /resources, cambiar el valor de url, por el siguiente jdbc:mysql://localhost:3306/newspaper_db.

    • Si estamos desde Linux o la consola de Git Bash:

        ./mvnw package
      
    • Si estamos desde la consola de Windows:

        ./mvnw.cmd package        
      
  3. Una vez que el proceso de build este terminado satisfactoriamente y veamos el archivo "newspaper-1.0.0.jar" dentro del directorio /target. Podemos generar la imagen de Docker que necesitamos. Sobre el directorio que contiene el archivo Dockerfile, ejecutamos:

         docker build -t docker:newspaper .
    
  4. Con la imagen de Docker lista, pueden verlo con el comando, "docker images". Podemos seguir con el paso siguiente, levantar ambos containers juntos, por un lado el container de MySQL y por el otro el container de la API. Para esto, ejecutamos:

    • Detener el container ejecutado en el paso 2:

        docker stop mysql-db
      
    • Eliminar el container detenido anteriormente:

        docker rm mysql-db
      
    • Sobre el directorio del proyecto ejecutar el archivo docker-compose.yml. Los que esten con LINUX instalar -> docker-compose y modificar en el archivo docker-compose.yml la ip 192.168.99.100 por localhost. Guardar y ejecutar:

        docker-compose up	    
      

    Listo, ya podemos acceder a la api utilizando el puerto 8080 y la ip asignada a la docker machine, la misma se puede ver con el comando "docker-machine ip". Generalmente http://192.168.99.100:8080

Entorno local

Otra forma de poder ejecutar la api es instalando las herramientas necesarias en nuestro equipo, de la siguiente forma.

  1. Instalar y confgiurar el motor de base de datos MySQL

  2. Instalar Java JDK 1.8

  3. Modificar las propiedades en el archivo application.yml para poder conectar con la base de datos instalada en el paso 1.

    • datasource.url
    • datasource.username
    • datasource.password
  4. Ejecuta la aplicacion de spring boot.

    Desde la terminal de Linux o Git Bash

     ./mvnw spring-boot:run
    

    Desde la consola de Windows

     ./mvnw.cmd spring-boot:run
    
  5. Si todo se configuro correctamente ya podemos ingresar a la api con "http://localhost:8080/"

Ejemplo de request y response:

Pueden usar POSTMAN

Traer categorias:

GET localhost:8080/categories o {docker-machine-ip}:8080/categories

Response:

{
  "_embedded" : {
    "categories" : [ {
      "name" : "sports",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/categories/1"
        },
        "category" : {
          "href" : "http://localhost:8080/categories/1"
        },
        "news" : {
          "href" : "http://localhost:8080/categories/1/news"
        }
      }
    }, {
      "name" : "local",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/categories/2"
        },
        "category" : {
          "href" : "http://localhost:8080/categories/2"
        },
        "news" : {
          "href" : "http://localhost:8080/categories/2/news"
        }
      }
    }, {
      "name" : "world",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/categories/3"
        },
        "category" : {
          "href" : "http://localhost:8080/categories/3"
        },
        "news" : {
          "href" : "http://localhost:8080/categories/3/news"
        }
      }
    }, {
      "name" : "economy",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/categories/4"
        },
        "category" : {
          "href" : "http://localhost:8080/categories/4"
        },
        "news" : {
          "href" : "http://localhost:8080/categories/4/news"
        }
      }
    }, {
      "name" : "politics",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/categories/5"
        },
        "category" : {
          "href" : "http://localhost:8080/categories/5"
        },
        "news" : {
          "href" : "http://localhost:8080/categories/5/news"
        }
      }
    }, {
      "name" : "entertainment",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/categories/6"
        },
        "category" : {
          "href" : "http://localhost:8080/categories/6"
        },
        "news" : {
          "href" : "http://localhost:8080/categories/6/news"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/categories{?page,size,sort}",
      "templated" : true
    },
    "profile" : {
      "href" : "http://localhost:8080/profile/categories"
    }
  },
  "page" : {
    "size" : 20,
    "totalElements" : 6,
    "totalPages" : 1,
    "number" : 0
  }
}

Cargar una noticia:

POST localhost:8080/news o {docker-machine-ip}:8080/news

Body:

{
	  "title" : "Test title 4",
	  "body" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae urna ipsum. Pellentesque in quam nisl. Sed auctor mi vel sagittis suscipit.",
	  "date" : "2017-09-24",
	  "reporter" : "http://localhost:8080/reporters/1",
	  "category" : "http://localhost:8080/categories/1"
}

Response: status 201 Created

Headers:

content-type →application/hal+json;charset=UTF-8
date →Thu, 19 Oct 2017 13:31:14 GMT
location →http://localhost:8080/news/2
transfer-encoding →chunked

Body:

{
    "title": "Test title 4",
    "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae urna ipsum. Pellentesque in quam nisl. Sed auctor mi vel sagittis suscipit.",
    "date": "2017-09-24T00:00:00.000+0000",
    "_links": {
        "self": {
            "href": "http://localhost:8080/news/2"
        },
        "news": {
            "href": "http://localhost:8080/news/2"
        },
        "category": {
            "href": "http://localhost:8080/news/2/category"
        },
        "reporter": {
            "href": "http://localhost:8080/news/2/reporter"
        }
    }
}

About

API para utilizar como backend del proyecto de Programación avanzada II

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •