API de KnowNode
La API es una muestra de amabilidad y cooperación con los computines.
Contenidos
La API
La API solo permite el método http GET
. Los otros métodos (POST
, PUT
y DELETE
) no hacen nada.
La API fue publicada para integración con otros sistemas o para practicar. Ni idea.
Estándares
La API cuenta con el siguiente estándar de respuesta:
- El único método que responde es
GET
.
- Los datos consultados son devueltos en un JSON.
- Dentro del JSON siempre vendrán los siguientes parámetros:
status
: ok
| fail
| auth
data
: el contenido JSON
Rutas disponibles
A continuación, se definieron las siguientes rutas:
Asignaturas/
Devuelve todas las asignaturas, ordenadas según la malla.
id
: PrimaryKey asociada al objeto.
nombre
: Nombre de la asignatura.
codigo
: Abreviatura "slugificada" del nombre.
semestre_id
: ForeignKey del semestre al que pertenece.
estado
: Estado actual de sus contenidos.
- Esperando...: Cuando se esta en vacaciones, en espera de aceptar contenido.
- En planeación...: Se esta planeando el como se estructuraran los contenidos, aun no acepta contenido.
- En curso...: La asignatura acepta contenido.
- Finalizado: Los contenidos están terminados, solo mejoras se aceptan.
Contribuciones/
Devuelve todas las contribuciones, absolutamente todas. Ordenadas según fecha de publicación.
id
: PrimaryKey asociada al objeto.
nombre
: Nombre del contenido según su unidad.
archivo
: Ruta del archivo relativo a root/recursos
.
publicado
: Fecha de aceptación y publicación.
actualizado
: Fecha de actualización.
unidades_id
: ForeignKey de la unidad.
Propuestas/
Devuelve todas las propuestas pendiente de revisión. Ordenadas por fecha de publicación.
id
: PrimaryKey asociada al objeto.
nombre
: Nombre del contenido según su unidad.
autor_id
: ForeignKey del id del autor creador.
estado
: Estado actual de la propuesta.
- En espera...: Cuando la propuesta es nueva y esta pendiente de su primera revisión.
- Revisión en espera...: La propuesta fue devuelta al autor para una mejora.
- Edición en espera...: La propuesta es una mejora de una contribución y esta en espera de revisión.
- Mejora en espera...: La propuesta de mejora fue devuelta al autor para una mejora.
publicado
: Fecha de publicación.
unidades_id
: ForeignKey de la unidad.
Unidades/
Devuelve todas las unidades, absolutamente todas. Ordenadas según creación.
id
: PrimaryKey asociada al objeto.
asignatura_id
: ForeignKey de la asignatura.
unidad_id
: ForeignKey de la unidad.
nombre
: Nombre de la unidad según la asignatura y su unidad.
Nombres/
Devuelve los nombres de cada unidad raíz. Son 4 unidades por defecto. Ordenadas por numero.
id
: PrimaryKey asociada al objeto.
nombre
: Nombre de la unidad.
Usuarios/
Requiere autenticación y ser parte del staff.
Devuelve todos los usuarios registrados. Ordenados por fecha de registro.
Los campos responden al modelo User, de Django. Para las definiciones de cada campo, se anima al lector a leer la documentación oficial de Django Users.
Se han censurado campos que obviamente deben ser censurados. Como correo, nombre real y contraseña.
Usando la API
A continuación se muestran distintos códigos que hacen lo mismo, para que entiendas la idea.
Python
Autor: Güillǝr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 | import requests # pip install requests
import json
API = "https://knownode.crizacio.com/api/"
RUTAS = [
"asignaturas/",
"contribuciones/",
"propuestas/",
"unidades/",
"nombres/",
"usuarios/",
]
ASIGNATURA = 8
asignatura = json.loads(
requests.get(
str(f"{API}{RUTAS[0]}")).text
)['data'][ASIGNATURA]
# Informacion de la asignatura
print(str('[{}] {}'.format(asignatura['codigo'], asignatura['nombre'])))
# Mostrar las unidades de la asignatura y sus contribuciones
unidades = json.loads(
requests.get(
str(f"{API}{RUTAS[3]}")).text
)["data"]
contribuciones = json.loads(
requests.get(
str(f"{API}{RUTAS[1]}")).text
)["data"]
for unidad in unidades:
if unidad['asignatura_id'] == ASIGNATURA+1:
print(" {}) {}".format(unidad["unidad_id"], unidad["nombre"]))
# Mostrar solo las contribuciones de la asignatura en la unidad actual
for contribucion in contribuciones:
if contribucion['unidades_id'] == unidad['id']:
print(str(' {}'.format(contribucion['nombre'])))
|
El output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | [Back-End] Programación Back-End
1) Tecnologías del lado del Servidor
The Django Framework
Templates y archivos estáticos
Archivos estáticos
Contextos de templates
2) Framework Back-End
Integración con bases de datos
Modelo Django
Aplicación de modelos Django
Formularios Django
Contextos de vista Django
Manejo de formularios
La aplicación messages
La U y la D en CRUD
Django Admin
3) API RESTful con Integración de Base de Datos
|
PHP
Autor: Crizacio (basado en el script de arriba)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | <?php
define("API", "https://knownode.crizacio.com/api/");
define("RUTAS", [
"asignaturas/",
"contribuciones/",
"propuestas/",
"unidades/",
"nombres/",
"usuarios/",
]);
define("ASIGNATURA", 8);
$asignatura = json_decode(file_get_contents(API.RUTAS[0]), true)["data"][ASIGNATURA];
# Informacion de la asignatura
print("[".$asignatura["codigo"]."] ".$asignatura["nombre"]."\n");
# Mostrar las unidades de la asignatura y sus contribuciones
$unidades = json_decode(file_get_contents(API.RUTAS[3]), true)["data"];
$contribuciones = json_decode(file_get_contents(API.RUTAS[1]), true)["data"];
foreach ($unidades as $unidad) {
if ($unidad["asignatura_id"] == ASIGNATURA+1) {
print(" ".$unidad["unidad_id"].") ".$unidad["nombre"]."\n");
# Mostrar solo las contribuciones de la asignatura en la unidad actual
foreach ($contribuciones as $contribucion) {
if ($contribucion["unidades_id"] == $unidad["id"]) {
print(" ".$contribucion["nombre"]."\n");
}
}
}
}
?>
|
El output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | [Back-End] Programación Back-End
1) Tecnologías del lado del Servidor
The Django Framework
Templates y archivos estáticos
Archivos estáticos
Contextos de templates
2) Framework Back-End
Integración con bases de datos
Modelo Django
Aplicación de modelos Django
Formularios Django
Contextos de vista Django
Manejo de formularios
La aplicación messages
La U y la D en CRUD
Django Admin
3) API RESTful con Integración de Base de Datos
|
Como puedes observar, es muy simple.