Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add documentation of API (/w refactor of routes) #29

Open
wants to merge 66 commits into
base: main
Choose a base branch
from

Conversation

bytelovers
Copy link

@bytelovers bytelovers commented Jan 5, 2023

Creation an API documentation of kings league, contains all endpoints from other contributions
It's the first version and It's only visible opening the file 'index.html'

Pending:

  • Create doc:api command to generate API doc
  • Publish in a server endpoint
  • Modify host to set dynamically on generate site
  • Response examples
  • General api documentation (API versioning, etc...)

Screenshot 2023-01-07 at 11 22 48

Copy link
Contributor

@Fasping Fasping left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FILE: api/teams.routes.js

This code includes error handling to catch any issues that may occur when reading the teams.json file, and it also uses an if statement to check whether the team was found before returning the JSON response. 😊

--------------------------------------

import { Hono } from 'hono'
import fs from 'fs'

const teamsApi = new Hono()
let teams

try {
teams = JSON.parse(fs.readFileSync('../db/teams.json', 'utf8'))
} catch (error) {
console.error(Error reading teams.json: ${error})
}

teamsApi.get('/', (ctx) => {
return ctx.json(teams)
})

teamsApi.get('/:id', (ctx) => {
const id = ctx.req.param('id')
const foundTeam = teams.find((team) => team.id === id)

if (!foundTeam) {
return ctx.json({ message: 'Team not found' }, 404)
}

return ctx.json(foundTeam)
})

export { teamsApi }

@Fasping
Copy link
Contributor

Fasping commented Jan 5, 2023

FILE: api/presidents.routes.js

Implementacióne:

    • Una importación para el módulo fs, que proporciona una API para interactuar con el sistema de archivos.
    • Un try...catch para manejar cualquier error que pueda ocurrir al leer el archivo presidents.json. El bloque try contiene la función fs.readFileSync, que lee el contenido del archivo y lo devuelve como una cadena. El bloque catch registra un mensaje de error en la consola si ocurre un error.
    • Comentarios de documentación en línea al código. Los comentarios de la documentación usan la especificación OpenAPI, que es un estándar para describir las API REST. Los comentarios incluyen información sobre las rutas de la API, como el método HTTP y la ruta, así como los parámetros de solicitud y respuesta para cada ruta.
    • Modifiqué la ruta /:id para incluir una declaración if que verifique si se encontró un presidente antes de devolver la respuesta JSON. Si no se encuentra un presidente, la ruta devuelve un objeto JSON con un mensaje de error y un código de estado 404.

Tienes el codigo debajo por si quieres implementarlo en otro commit ❤️


`
import { Hono } from 'hono'
import fs from 'fs'

const presidentApi = new Hono()
let presidents

try {
presidents = JSON.parse(fs.readFileSync('../db/presidents.json', 'utf8'))
} catch (error) {
console.error(Error reading presidents.json: ${error})
}

/**

  • @api {get} /presidents Get all presidents
  • @apiName GetPresidents
  • @APIGroup Presidents
  • @apiSuccess {Object[]} presidents List of presidents.
  • @apiSuccess {Number} presidents.id President ID.
  • @apiSuccess {String} presidents.name President name.
  • @apiSuccess {String} presidents.party President political party.
    */
    presidentApi.get('/', (ctx) => {
    return ctx.json(presidents)
    })

/**

  • @api {get} /presidents/:id Get a president by ID
  • @apiName GetPresidentById
  • @APIGroup Presidents
  • @apiParam {Number} id President ID.
  • @apiSuccess {Object} president President object.
  • @apiSuccess {Number} president.id President ID.
  • @apiSuccess {String} president.name President name.
  • @apiSuccess {String} president.party President political party.
  • @ApiError (404) {Object} NotFoundError President not found.
    */
    presidentApi.get('/:id', (ctx) => {
    const id = ctx.req.param('id')
    const foundPresident = presidents.find((president) => president.id === id)

if (!foundPresident) {
return ctx.json({ message: 'President not found' }, 404)
}

return ctx.json(foundPresident)
})

export { presidentApi }
`

@bytelovers
Copy link
Author

FILE: api/presidents.routes.js

Implementacióne:

    • Una importación para el módulo fs, que proporciona una API para interactuar con el sistema de archivos.
    • Un try...catch para manejar cualquier error que pueda ocurrir al leer el archivo presidents.json. El bloque try contiene la función fs.readFileSync, que lee el contenido del archivo y lo devuelve como una cadena. El bloque catch registra un mensaje de error en la consola si ocurre un error.
    • Comentarios de documentación en línea al código. Los comentarios de la documentación usan la especificación OpenAPI, que es un estándar para describir las API REST. Los comentarios incluyen información sobre las rutas de la API, como el método HTTP y la ruta, así como los parámetros de solicitud y respuesta para cada ruta.
    • Modifiqué la ruta /:id para incluir una declaración if que verifique si se encontró un presidente antes de devolver la respuesta JSON. Si no se encuentra un presidente, la ruta devuelve un objeto JSON con un mensaje de error y un código de estado 404.

Tienes el codigo debajo por si quieres implementarlo en otro commit ❤️

` import { Hono } from 'hono' import fs from 'fs'

const presidentApi = new Hono() let presidents

try { presidents = JSON.parse(fs.readFileSync('../db/presidents.json', 'utf8')) } catch (error) { console.error(Error reading presidents.json: ${error}) }

/**

  • @api {get} /presidents Get all presidents
  • @apiName GetPresidents
  • @APIGroup Presidents
  • @apiSuccess {Object[]} presidents List of presidents.
  • @apiSuccess {Number} presidents.id President ID.
  • @apiSuccess {String} presidents.name President name.
  • @apiSuccess {String} presidents.party President political party.
    */
    presidentApi.get('/', (ctx) => {
    return ctx.json(presidents)
    })

/**

  • @api {get} /presidents/:id Get a president by ID
  • @apiName GetPresidentById
  • @APIGroup Presidents
  • @apiParam {Number} id President ID.
  • @apiSuccess {Object} president President object.
  • @apiSuccess {Number} president.id President ID.
  • @apiSuccess {String} president.name President name.
  • @apiSuccess {String} president.party President political party.
  • @ApiError (404) {Object} NotFoundError President not found.
    */
    presidentApi.get('/:id', (ctx) => {
    const id = ctx.req.param('id')
    const foundPresident = presidents.find((president) => president.id === id)

if (!foundPresident) { return ctx.json({ message: 'President not found' }, 404) }

return ctx.json(foundPresident) })

export { presidentApi } `

No puedo usar los paquetes de node porque sino el wrangler no me arranca, pero sí que he añadido la doc al resto de endpoints.

Gracias!

Copy link
Contributor

@Fasping Fasping left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great job buddy!

@bytelovers bytelovers changed the title refactor: separete routing in files feat: add documentation of API (/w refactor of routes) Jan 7, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants