Esto es un API RESTFull de una libreria. Creada con NODEJS, EXPRESS y MONGODB.
Se requiere conocimientos de NODE y uso de terminales para utilizar este API
Se requiere tener MongoDB en su maquina y corriendo.
- Clonar este proyecto (Obvio)
cd library/src
npm i && npm run watch
- Su API deberia estar corriendo en
localhost:2302/api/v1
- Si desea cambiar el puerto verifique la carpeta
config/index
Debes crear libros para poder interactuar con las rutas, el flujo correcto seria crear algunos libros primero.
El modelo de un libro esta basado en los detalles que normalmente tiene un libro de amazon y otros detalles ya que en los requerimientos no se especifica la informacion que deben tener.
- Crear un libro
- Ver listado de libros
- Visualizar un libro
- Eliminar un libro
- Actualizar un libro
- Crear una pagina de libro
- Ver todas las pagina de un libro
- Ver una pagina de un libro
- Eliminar una pagina
- Actualizar una pagina
Todas las rutas que veras mas adelante deben estar corriendo en
localhost:2302/api/v1/your-route
Esto es solo un prefijo en las rutas para futuras actualizaciones en el API
cambiar la v1 por la siguiente v2, vX "Puede editar los archivos y cambiar esto
en config/index
"
Si, la variante aqui sera el METODO en que Consultes el API y algunos parametros. Como interactuas con un API que solo trata de libros es amigable utilizar un endpoint familiar y poco variante.
~~ Ruta: /books
~~ Metodo: POST
Para crear un libro algunos campos son obligatorios.
- name: *
- isbn: *
- desc: !
- publisher: !
- publicDate: !
- language: !
Porque REQUIRE*?
Segun investigue los libros tienen un numero unico llamado ISBN por lo cual seria recomendable que si registras un libro agregues ese tipo de informacion puede evaluarse y ponerse Opcional.
El nombre es necesario Obviamente seria redundate explicarlo.
{
"book": {
"name": "Más Allá de la Salud: Libro de Recetas Paleo y Keto",
"isbn": "978-1978282179",
"paperback": 240,
"publisher": "CreateSpace Independent Publishing Platform",
"publicDate": "2017-11-22T04:00:00.000Z",
"language": "Español",
"registered": "2019-05-19T17:22:02.121Z",
"code": "3435a9",
"desc": "¿Otro libro más de nutrición? ¿Pero cuántos más se necesitan?
Vivimos en un mundo con demasiada información, pero la falta de acción de
las personas en su salud es lo que ha creado la epidemia de enfermedades
que existen hoy en día. De hecho, la obesidad, diabetes, enfermedades
neurológicas, las enfermedades relacionadas a las hormonas y la inflamación
están ahora mismo en sus niveles más altos en la historia del mundo.",
}
}
~~ Ruta: /books
~~ Metodo: GET
Luego de crear varios libros podra ver el listado
~~ Ruta: /books/:code
~~ Metodo: GET
Si vez el listado de libros cada libro devuelve un campo ~~CODE~~
el cual se utiliza como id.
Pasalo como parametro a la url. como en el ejemplo
Ejemplo:
localhost:2302/api/v1/books/a35c2
Metodo: GET
~~ /books/:code
~~ Metodo: DELETE
Leer "Visualizar un libro" para entender el uso del parametro :code
~~ Ruta: /books/:code
~~ Metodo: PUT
Leer "Visualizar un libro" para entender el uso del parametro :code
Lea los campos de "Crear un libro" para ver las opciones que puede actualizar
~~ Ruta: /books/:book/pages
~~ Metodo: POST
Segun los requerimientos se debe listar las paginas en HTML o TEXTO, supuse que seria para dar uso del API con un un editor de texto WYSIWYG, esto quiere decir que la entrada de contenido por defecto sera HTML desde un editor.
Redundacia: Para crear una pagina su contenido debe ser creado con HTML simulando un editor de texto tipo "TinyMCE"
- Enviar datos al API
- Agrega el :book parametro (este es el campo CODE de un libro)
- Tu URL debe verse similar a esta:
/books/a35c2/pages
- { content: "your HTML" }
Boom! Deberias tener una pagina creada y un libro actualizado. OJO: Cuando crea una pagina se actualiza el paperback del libro.
{
"page": {
"content": "<div><h3>Build beautiful content for the web with Tiny</h3>
<p>The rich text editing platform that helped launch Atlassian,
Medium, Evernote, and more.</p></div>",
"prevPage": 0,
"nextPage": 2,
"page": 1,
"registered": "2019-05-19T05:59:42.891Z"
}
}
- content: *
Las paginas tienen otros campos pero estos se llenan segun otro tipo de informacion en la DB, por ejemplo:
- nextPage
- prevPage
- page
Se agrega el numero de pagina y la pagina anterior como la siguiente.
~~ Ruta: /books/:book/pages
~~ Metodo: GET
Segun los requerimientos se debe listar las paginas en HTML o TEXTO, por defecto el contenido es añadido en HTML por lo que el valor por defecto del formato sera HTML.
-
Tu URL debe verse similar a esta:
/books/a35c2/pages
-
Boom! Deberias tener un listado de paginas.
el formato es HTML por defecto si quieres ver el contenido en TEXTO PLANO
- solo agrega un QUERY a la URL:
- Tu URL debe verse similar a esta:
/books/a35c2/pages?format=text
{
"content": "Build beautiful content for the web with TinyThe
rich text editing platform that\nhelped launch Atlassian,
Medium, Evernote, and more.",
"prevPage": 14,
"nextPage": 16,
"page": 15,
"registered": "2019-05-19T06:20:01.793Z"
},
x200 pages..
~~ Ruta: /books/:book/pages/:page
~~ Metodo: GET
Puedes ver las paginas en HTML o TEXTO, por defecto el contenido es añadido en HTML por lo que el valor por defecto del formato sera HTML.
-
Tu URL debe verse similar a estas:
-
/books/a35c2/pages/1
-
/books/a35c2/pages/3
-
/books/a35c2/pages/5
-
/books/a35c2/pages/2
-
Boom! Deberias tener un pagina.
el formato es HTML por defecto si quieres ver el contenido en TEXTO PLANO
- solo agrega un QUERY a la URL:
- Tu URL debe verse similar a estas:
/books/a35c2/pages/1?format=text
/books/a35c2/pages/3?format=html
/books/a35c2/pages/5?format=text
/books/a35c2/pages/2?format=html
~~ Ruta: /books/:book/pages/:page
~~ Metodo: DELETE
~~ Ruta: /books/:book/pages/:page
~~ Metodo: PUT
{ content: "YOUR HTML" }
Esta API utiliza Express Validation para evitar crear libros sin sus debidos campos y limpiar los datos.
Se utiliza un ORM Mongoose para interactuar con MONGODB
sanitize-html:
Validar HTML
HTML-to-text:
Transformar HTML en TEXTO