---
# System prepended metadata

title: APIv2

---


# APIv2
- Básicamente hacer lo que dice [acá](https://juanda.gitbooks.io/webapps/content/api/arquitectura-api-rest.html)
- Estructura de la request
- Estructura de la response
- Códigos de estado de respuesta HTTP
- Retornar los recursos asociados (flags) o links a esos recursos
- Manejo de errores, estructura de respuestas y códigos correctos

## Estructura de Request
``` json
{
  "attribute_1": "...",
  "attribute_2": "..."
}
```

## Estructura de Response

#### Secciones
- data (records)
    - id
    - type
    - attributes
    - relationships
        - data
        - links (?)
- included (extra records coming from relationships)
    - id
    - type
    - attributes
    - relationships
        - data
        - links (?)
- meta
    - extra information releated to pagination, records, etc.


:::spoiler Click to show an example
``` json
{
  "data": [{
    "type": "articles",
    "id": "1",
    "attributes": {
      "title": "JSON:API paints my bikeshed!"
    },
    "relationships": {
      "author": {
        "links": {
          "self": "http://example.com/articles/1/relationships/author",
          "related": "http://example.com/articles/1/author"
        },
        "data": { "type": "people", "id": "9" }
      },
      "comments": {
        "links": {
          "self": "http://example.com/articles/1/relationships/comments",
          "related": "http://example.com/articles/1/comments"
        },
        "data": [
          { "type": "comments", "id": "5" },
          { "type": "comments", "id": "12" }
        ]
      }
    },
    "links": {
      "self": "http://example.com/articles/1"
    }
  }],
  "included": [{
    "type": "people",
    "id": "9",
    "attributes": {
      "firstName": "Dan",
      "lastName": "Gebhardt",
      "twitter": "dgeb"
    },
    "links": {
      "self": "http://example.com/people/9"
    }
  }, {
    "type": "comments",
    "id": "5",
    "attributes": {
      "body": "First!"
    },
    "relationships": {
      "author": {
        "data": { "type": "people", "id": "2" }
      }
    },
    "links": {
      "self": "http://example.com/comments/5"
    }
  }, {
    "type": "comments",
    "id": "12",
    "attributes": {
      "body": "I like XML better"
    },
    "relationships": {
      "author": {
        "data": { "type": "people", "id": "9" }
      }
    },
    "links": {
      "self": "http://example.com/comments/12"
    }
  }],
  "meta": {
      "total": 12,
      "lang": "es",
      "country": "CL"
  }
}
```
:::

## Códigos de estado de respuesta HTTP
:::info
### Respuestas informativas :mega: 
- **100 Continue** – Esta respuesta provisional indica que todo hasta ahora está bien y que el cliente debe continuar con la solicitud o ignorarla si ya está terminada.
- **102 Processing** – El servidor ha recibido la solicitud y aún se encuentra procesandola, por lo que no hay respuesta disponible.
:::

:::success
### Respuestas satisfactorias :100: 
- **200 OK** – Request exitosa (en el body debería estar el recurso esperado).
- **201 Created** – Recurso creado.
- **202 Accepted** – La solicitud se ha recibido, pero aún no se ha actuado. Es una petición "sin compromiso".
- **204 No content** - Request exitosa sin body.
- **206 Partial Content** - Cuando queremos devolver parte del recurso solicitado mientras el proceso continua. 
:::

:::warning
### Redirecciones :zap: 

:::

:::danger
### Errores de los clientes :face_palm: 
- **400 Bad Request** – No pasa alguna validación.
- **401 Unauthorized** – Usuario no autenticado.
- **403 Forbidden** – Usuario autenticado pero sin permisos para acceder a un recurso.
- **404 Not Found** – El recurso al que se intenta acceder no existe.
:::

:::danger
### Errores del servidor :fire: 
- **500 Internal server error** – Error genérico que debería evitarse lo máximo posible.
- **502 Bad Gateway** – Error en el servidor al intentar conectarse a un servicio ajeno a él.
- **503 Service Unavailable** – Error grave e inesperado del servidor.
:::

