Si la llamada al método fue exitosa, el código HTTP de estado de respuesta es 200 (OK). Si se intenta acceder a alguna llamada que requiere autenticación, sin pasar las credenciales apropiadas, el código de error será 401 (Unauthorized). Si el objeto con el que se va a interactuar no existe, el código será 404 (Not Found). Si se presenta un error de la plataforma, el código de error será 500 (Internal Server Error).
Para autenticar los servicios se trabaja con un token de autenticación, este token tiene tiempo de expiración máximo de un día, para refrescar el token basta con refrescar la página que proyecta el iframe. Cada vez que se visita la página que tiene un iframe se refresca el token.
El token se envía como parámetro GET en cada una de las tres páginas que tienen los iframes, a saber, el recetador, el planeador para administrador de colegio y el planeador de asignatura curso para los docentes.
El token para el administrador de plataforma únicamente es válido para los usuarios que estén en el grupo Admin Planeador que a su vez debe tener el permiso de modificar receta.
A nivel de planeaciones de curso asignatura, el administrador de colegio tiene permiso para editar las planeaciones de todos los profesores y cada profesor puede editar únicamente sus planeaciones, es decir aquellos curso asignatura en los cuales sea profesor o profesor auxiliar.
Si el token no es válido se obtendrá un error 401(Unathorized), en caso de que intente a acceder vía el webservice a un recurso que no esté bajo su potestad, se arrojará un error 403(FORBIDDEN)
A continuación un ejemplo de cómo obtener el token una vez se haya visitado una página que genere un token
Cuando el servicio ofrece una respuesta exitosa, retorna siempre en formato JSON o bien un elemento o un listado de elementos paginados en porciones de 30 elementos. En caso de Internal Server Error hay unos códigos que ofrecen explicación adicional del error.
A continuación se describen los códigos de error y los mensajes respectivos que pueden emitir los servicios en caso de que el código de estado sea 500.
- NO_BOOK_ID: 1 No hay un libro con el id recibido
- NO_VERSION: 2 La versión no está presente
- MALFORMED_JSON: 3 Json mal formado
- MISSING_JSON: 4 Hace falta el json
- ONLY_POST_ALLOWED: 5 Solamente se acepta método post
- NO_RECIPE_FOR_BOOK: 6 No hay receta publicada para este libro
- VERSION_RANGE_ERROR: 8 La versión debe estar entre 0 y 32000
- VERSION_FROM_RANGE_ERROR: 9 La versión debe estar entre 0 y 32000
- NO_PLANNING_FOR_COURSE_SUBJECT: 11 No hay planeación publicada para el curso asignatura.
Puede acceder al índice de los métodos expuestos para las recetas vía
https://sabios.librosylibros.co/api/recipe/
El planeador se constituye como una aplicación que consume servicios de lectura y escritura de la plataforma.
La página de entrada a la construcción de recetas es https://sabios.librosylibros.co/planeador/ allí se genera el token para quienes tienen permiso para hacer administración de las recetas.
A continuación presentamos los datos que ofrece una receta
- book_id : (entero)
- identificador de la edición del libro
- version : (entero de 0 a 32000)
- versión de la receta
- json_recipe : (json)
- receta
- is_published : (booleano)
- indica si ha sido publicada o no la receta
- modified_at : (timestamp)
- indica cuándo fue actualizada por última vez la receta
- from_version : (entero de 0 a 32000)
- indica la versión de la que proviene
- created_by : (email)
- Correo electrónico de la persona que creó la versión
- book_id : (entero)
- identificador del libro
- name : (cadena)
- nombre del libro
- area : (cadena)
- nombre del área
- tier : (cadena)
- nombre del grado en la plataforma
Dado un libro, se puede crear recetas para el mismo, de ahora en adelante vamos a emplear como ejemplo el libro con id 42.
En los ejemplos posteriores, asumimos que ya obtuvo su token de autenticación y que es 857893dbd1b96439cb9486e8ae38dac824b5758d
El primer método disponible es el listado de libros disponible en la plataforma, para acceder al mismo se usa GET sobre https://sabios.librosylibros.co/api/recipe/book/ , tal servicio está paginado de a 30 elementos.
Al aplicar:
curl -X GET https://sabios.librosylibros.co/api/recipe/book/ -H 'Authorization: Token 8dbc084dabf43baf5f5a29cf1ea08134c57487f3'
Se obtendrá algo parecido a:
{"count": 15, "next": null, "previous": null, "results": [{"book_id": 42, "name": "ZOOM A LAS CIENCIAS SOCIALES 1", "area": "Ciencias Sociales"}, {"book_id": 41, "name": "ZOOM A LAS CIENCIAS SOCIALES 2", "area": "Ciencias Sociales"}, {"book_id": 40, "name": "ZOOM A LAS CIENCIAS SOCIALES 3", "area": "Ciencias Sociales"}, {"book_id": 39, "name": "ZOOM A LAS CIENCIAS SOCIALES 4", "area": "Ciencias Sociales"}, {"book_id": 32, "name": "ZOOM A LAS CIENCIAS SOCIALES 5", "area": "Ciencias Sociales"}, {"book_id": 48, "name": "ZOOM A LAS MATEM\u00c1TICAS 1", "area": "Matem\u00e1ticas"}, {"book_id": 49, "name": "ZOOM A LAS MATEM\u00c1TICAS 2", "area": "Matem\u00e1ticas"}, {"book_id": 50, "name": "ZOOM A LAS MATEM\u00c1TICAS 3", "area": "Matem\u00e1ticas"}, {"book_id": 51, "name": "ZOOM A LAS MATEM\u00c1TICAS 4", "area": "Matem\u00e1ticas"}, {"book_id": 52, "name": "ZOOM A LAS MATEM\u00c1TICAS 5", "area": "Matem\u00e1ticas"}, {"book_id": 43, "name": "ZOOM AL LENGUAJE 1", "area": "Lenguaje"}, {"book_id": 44, "name": "ZOOM AL LENGUAJE 2", "area": "Lenguaje"}, {"book_id": 45, "name": "ZOOM AL LENGUAJE 3", "area": "Lenguaje"}, {"book_id": 46, "name": "ZOOM AL LENGUAJE 4", "area": "Lenguaje"}, {"book_id": 47, "name": "ZOOM AL LENGUAJE 5", "area": "Lenguaje"}]}
Los libros en cada paginación serán un listado de estructuras Libro
Para obtener la receta base del libro basta con acceder vía GET a https://sabios.librosylibros.co/api/recipe/42/base/ , puede emplear:
curl -X POST https://sabios.librosylibros.co/api/recipe/42/base/ -H "Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d" -H "Content-Type: application/json"
El cual arrojará un json de receta marcado con la versión 0 y que proviene de la versión 0, parecido a:
{"book_id": 42, "version": 0, "json_recipe": "{\"estandares\": [{\"nucleos\": [{\"id_nucleo\": 165, \"texto_estrategia_lyl\": \"\", \"texto_nucleo_lyl\": \"ME ORIENTO\", \"texto_actividades_lyl\": \"\", \"temas\": [{\"texto_recursos_lyl\":...
Dado que ya tenemos la información básica para construir las recetas del libro, para añadir la versión 1 de la receta al libro, se usaría el método POST sobre https://sabios.librosylibros.co/api/recipe/42/1/ con una llamada como:
curl -X POST https://sabios.librosylibros.co/api/recipe/42/1/ -d '{"from_version": 0, "json_recipe": {}' -H "Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d" -H "Content-Type: application/json"
Obtendrá una respuesta en formato JSON similar a lo siguiente:
{"book_id": 42, "version": 1, "json_recipe": "{}", "is_published": false, "modified_at": "2014-01-22 15:15:51", "from_version": 0, "created_by": "correo@correo.com.co"}
Es posible crear más versiones de la misma receta, por ejemplo, si se hace POST sobre https://sabios.librosylibros.co/api/recipe/42/2/ , será posible crear la versión 2 de la receta para el libro con id 42, por ejemplo:
curl -X POST https://sabios.librosylibros.co/api/recipe/42/2/ -d '{"from_version": 1, "json_recipe": {}' -H "Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d" -H "Content-Type: application/json"
De nuevo obtendrá la receta de cómo quedó almacenada la información similar a:
{"book_id": 42, "version": 2, "json_recipe": "{}", "is_published": false, "modified_at": "2014-01-22 15:15:51", "from_version": 1, "created_by": "correo@correo.com.co"}
También puede modificar recetas, basta con usar el mismo una URL de una receta con una versión ya existente con POST, como por ejemplo:
curl -X POST https://sabios.librosylibros.co/api/recipe/42/2/ -d '{"json_recipe": "{\"list\": [1, 2]}", "from_version": 1}' -H "Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d" -H "Content-Type: application/json"
Obtendrá una respuesta como:
{"book_id": 42, "version": "2", "json_recipe": "{u'list': [1, 2]}", "is_published": false, "modified_at": "2014-01-22 15:20:04", "from_version": 1, "created_by": "correo@correo.com.co"}
Cabe notar que el id del libro y la versión están en el URL, mientras que la versión de la que proviene y la receta en cuestión son datos que debe enviar, siempre que guarde o actualice una receta exitósamente obtendrá una estructura de receta.
Para obtener la versión de una receta previamente publicada basta con hacer GET sobre la versión del libro en cuestión, por ejemplo, para obtener la información de la versión 2 se emplearía:
curl https://sabios.librosylibros.co/api/recipe/42/2/ -H 'Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d'
Obtendrá algo similar a:
{"book_id": 42, "version": 2, "json_recipe": "{\"list\": [1, 2]}", "is_published": false, "modified_at": "2014-01-22 15:20:04", "from_version": 1, "created_by": "correo@correo.com.co"}
La entrada es el id del libro y la versión, que van incluídas en la URL, se obtendrá en caso de éxito una estructura de receta.
Para obtener las recetas del libro, se accede con GET a https://sabios.librosylibros.co/api/recipe/42/list/ con una llamada como:
curl -X GET https://sabios.librosylibros.co/api/recipe/42/list/ -H "Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d"
Obtendrá una respuesta en JSON similar a:
{"count": 2, "next": null, "previous": null, "results": [{"book_id": 42, "version": 1, "json_recipe": "{\"list\": [1, 2]}", "is_published": false, "modified_at": "2014-01-22 15:19:36", "from_version": 1, "created_by": "correo@correo.com.co"}, {"book_id": 42, "version": 2, "json_recipe": "{\"list\": [1, 2]}", "is_published": false, "modified_at": "2014-01-22 15:20:04", "from_version": 1, "created_by": "correo@correo.com.co"}]}
Tenga en cuenta que los resultados están paginados; cada petición entrega máximo 30 elementos. Las URLs correspondientes para pedir las páginas anterior o siguiente se entregan en la respuesta, en los atributos previous y next de la respuesta.
Por ejemplo, para acceder a la página 32 agregará el parámetro GET page
La entrada es el id del libro que va en la URL y el resultado es un json que contiene la cantidad total de recetas para el libro, la página anterior, la página siguiente y los resultados de la página actual en una lista de recetas.
Dado que es posible tener muchas versiones, habrá una única versión para que los colegios puedan tomarla para hacer sus planeaciones. En este caso si se desea publicar la versión 2, se empleará el método POST sobre https://sabios.librosylibros.co/api/recipe/42/1/publish/ con una llamada como:
curl -X POST https://sabios.librosylibros.co/api/recipe/42/1/publish/ -H "Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d" -H "Content-Type: application/json"
Obtendrá una respuesta en formato JSON como:
{"book_id": 42, "version": 1, "json_recipe": "{\"list\": [1, 2]}", "is_published": true, "modified_at": "2014-01-22 15:19:36", "from_version": 1, "created_by": "correo@correo.com.co"}
Esta acción establecerá la versión indicada como la pública.
La entrada es el id del libro y la versión de la receta a publicar, estas vienen en el URL y como resultado de forma exitosa se obtendrá una estructura de receta.
Una vez que hay una receta publicada se puede acceder a https://sabios.librosylibros.co/api/recipe/42/ con el método GET con una llamada como:
curl -X GET https://sabios.librosylibros.co/api/recipe/42/ -H 'Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d' -H "Content-Type: application/json"
Obtendrá la receta de la versión pública para el libro en formato json:
{"book_id": 42, "version": 1, "json_recipe": "{\"list\": [1, 2]}", "is_published": true, "modified_at": "2014-01-22 15:19:36", "from_version": 1, "created_by": "correo@correo.com.co"}
Si el llamado es de un libro válido se obtiene una estructura de la receta publicada.
Puede acceder al índice de los métodos expuestos para el planeador vía
https://sabios.librosylibros.co/api/planning/
El administrador de colegio puede acceder al planeador de cada asignatura vía el menú planeador cuando está administrando un curso, en esa página se regenerará el token cada vez que la visite
Por su parte el profesor de colegio puede acceder al planeador de cada asignatura vía el menú que aparece en cada curso asignatura que tenga asignado, allí se regenerará el token
Para efectos prácticos, los ejemplos a continuación asumen que el token es 8dbc084dabf43baf5f5a29cf1ea08134c57487f3 , el colegio tiene identificador 1.
- course_subject_id : (entero)
- identificador del cursoasignatura
- version : (entero de 0 a 32000)
- versión del plan
- json_planing : (json)
- planeación
- is_published : (booleano)
- indica si ha sido publicada o no la receta
- modified_at : (timestamp)
- indica cuándo fue actualizada por última vez la receta
- from_version : (entero de 0 a 32000)
- indica la versión de la que proviene
- teacher_name : (cadena)
- nombre del profesor del curso asignatura
- subject_name : (cadena)
- nombre del área
- course_name : (cadena)
- nombre del curso
- tier_name : (cadena)
- nombre del grado en la plataforma
- book_name : (cadena)
- nombre del libro
- book_id : (entero)
- id de la edición del libro
- created_by : (email)
- Correo electrónico de la persona que creó la versión
- course_subject_id : (entero)
- identificador del cursoasignatura
- plan_version : (entero de 0 a 32000)
- versión del plan
- teacher_name : (cadena)
- nombre de quien creó el plan
- subject_name : (cadena)
- nombre de la asignatura
- course_name : (cadena)
- nombre del curso
- tier_name : (cadena)
- nombre del grado en la plataforma
- modified_at : (timestamp)
- indica cuándo fue actualizada por última vez la receta
- created_by : (email)
- Correo electrónico de la persona que creó el plan
- name : (cadena)
- nombre de curso asignatura
- teacher_name : (cadena)
- nombre del profesor del curso asignatura
- subject_name : (cadena)
- nombre del área
- book_name : (cadena)
- nombre del libro
- tier_name : (cadena)
- nombre del grado
- course_name : (cadena)
- nombre del curso
- section_name : (cadena)
- nombre del ciclo
Para obtener las columnas de planeación del colegio con id 1, se visita https://sabios.librosylibros.co/api/planning/columns/1/
Al aplicar:
curl https://sabios.librosylibros.co/api/planning/columns/1/ -H 'Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d'
Se obtiene una lista de resultados con estructura JSON sin paginación:
[{"id": 5, "name": "Cuestionate", "description": "Pregunta general del proyecto", "position": 1}, {"id": 6, "name": "Reflexiona", "description": "Reflexi\u00f3n del proyecto", "position": 2}]
Para añadir una planeación al curso asignatura con id 42, con la versión 1, se aplicaría:
curl -X POST https://sabios.librosylibros.co/api/planning/42/1/ -d '{"json_planning": "{}"}' -H 'Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d' -H "Content-Type: application/json"
Obtendrá una estructura de Planeación en JSON parecida a:
{"course_subject_id": 42, "version": 1, "json_planning": "{}", "is_published": true, "modified_at": "2014-01-23 14:54:32", "from_version": 0, "created_by": "lunadj12@gmail.com"}
La edición de la versión se hace exactamente con el mismo comando con un curso asignatura y una versión ya existente:
curl -X POST https://sabios.librosylibros.co/api/planning/42/1/ -d '{"json_planning": "{}"}' -H 'Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d' -H "Content-Type: application/json"
Los parámetros admitidos son:
Para obtener la versión 1 de planeación dado el id de un libro con id 42 se puede visitar https://sabios.librosylibros.co/api/planning/42/1/
En esta oportunidad se emplea el método GET, por ejemplo:
curl https://sabios.librosylibros.co/api/planning/42/1/ -H 'Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d'
Que entregaría una estructura de datos JSON de planeación parecida a:
{"course_subject_id": 42, "version": 1, "json_planning": "{}", "is_published": false, "modified_at": "2014-01-23 14:54:32", "from_version": 0, "created_by": "lunadj12@gmail.com"}
Para obtener el listado de todas las versiones para una asignatura curso con id 42 se puede emplear:
curl https://sabios.librosylibros.co/api/planning/42/list/ -H 'Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d'
Obtendrá un listado de estructuras de planeación parecido a:
{"count": 1, "next": null, "previous": null, "results": [{"course_subject_id": 42, "version": 1, "json_planning": "{}", "is_published": true, "modified_at": "2014-01-23 14:54:32", "from_version": 0, "created_by": "lunadj12@gmail.com"}]}
Con la paginación usual.
Para publicar la versión 1 de planeación del curso asignatura con id 42, se puede aplicar:
curl -X POST https://sabios.librosylibros.co/api/planning/42/1/publish/ -H 'Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d'
Obtendrá una estructura de planeación json parecida a:
{"course_subject_id": 42, "version": 1, "json_planning": "{}", "is_published": true, "modified_at": "2014-01-23 14:54:32", "from_version": 0, "created_by": "lunadj12@gmail.com"}
Para obtener el plan publicado para una asignatura curso con id 42 con curl se aplicaría:
curl https://sabios.librosylibros.co/api/planning/42/ -H 'Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d'
Obtendrá una estructura de planeación parecida a:
{"course_subject_id": 42, "version": 1, "json_planning": "{}", "is_published": true, "modified_at": "2014-01-23 14:54:32", "from_version": 0, "created_by": "lunadj12@gmail.com"}
Para obtener los planes publicados para un curso con id 29 con curl se aplicaría
curl https://sabios.librosylibros.co/api/planning/course/29/ -H ‘Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d’
Obtendrá un listado de estructuras de curso asignatura parecido a:
{"count": 1, "next": null, "previous": null, "results": [{"course_subject_id": 48, "teacher_name": "Diana Ariza", "subject_name": "Ciencias Sociales", "plan_version": 1, "modified_at": "2014-01-23 14:54:32", "created_by": "lunadj12@gmail.com"}]}
Para obtener los planes publicados para un curso asignatura con id 42 con curl se aplicaría
curl https://sabios.librosylibros.co/api/planning/course_subject_data/42/ -H ‘Authorization: Token 857893dbd1b96439cb9486e8ae38dac824b5758d’
Obtendrá un listado de estructuras de curso asignatura parecido a:
{"course_subject_id": 42, "teacher_name": "Diana Ariza", "subject_name": "Ciencias Sociales", "plan_version": 1, "modified_at": "2014-01-23 14:54:32", "created_by": "lunadj12@gmail.com"}
Cada uno de las interfaces de planeador: frontend de administrador de plataforma para recetas, planeador para administrador de colegio y planeador para profesor son configurables vía https://sabios.librosylibros.co/admin/constance/config/ a través de las variables URL_BASE_PLANNER_ADMIN, URL_BASE_PLANNER_SCHOOL_ADMIN y URL_BASE_PLANNER_TEACHER.
El planeador de recetas cuenta con el parámetro GET en la llamada al iframe:
El planeador de administrador de colegio cuenta con los parámetros GET en la llamada al iframe:
El planeador del profesor cuenta con los parámetros GET en la llamada al iframe: