Integração
A API REST do Wise Timetable
Tudo o que o Wise Timetable publica pode ser lido como JSON sobre HTTPS — pelo seu portal, pelo seu ambiente virtual de aprendizagem, pela sua própria aplicação, por um ecrã informativo ou por uma ferramenta de relatórios. O manual é público, pelo que os seus programadores podem avaliar a integração antes de alguém assinar o que quer que seja.
- API v2, JSON sobre HTTPS
- Manual completo, sem formulário
- Cache ETag, 304 quando nada mudou
Pode inspecioná-la agora mesmo
A descrição do serviço não precisa de credenciais, pelo que a primeira pergunta que um programador faz tem resposta numa só linha.
GET https://wise-tt.com/api/v2/meta devolve o nome do serviço, a versão e a lista de pontos de acesso que o servidor está atualmente a servir. Sem token, sem conta, sem chamada comercial — abra-o num navegador. É também a forma honesta de descobrir tudo o que tenha sido acrescentado depois da última revisão do manual.
O manual de integração é publicado na íntegra, sem formulário, com os parâmetros de cada ponto de acesso, uma resposta de exemplo realista para cada um e exemplos completos e funcionais em curl, Python, JavaScript e C. Publicamo-lo porque uma integração que parece viável no papel e se revela inviável é uma descoberta muito mais cara no terceiro mês.
Ler dados exige de facto uma conta de API, emitida por nós e limitada às escolas que pode ler. Essa parte é deliberada: um horário indica quem leciona o quê e que estudantes o frequentam.
Um pedido por vista, não uma cadeia deles
GET /v2/schedule recebe uma escola, um intervalo de datas e o que está a seguir — grupos, um docente, uma sala, uma disciplina ou nada de todo para a escola inteira — e devolve todos os eventos do intervalo com as suas salas, docentes, grupos e ramos já preenchidos, juntamente com os feriados da escola e os limites do ano letivo publicado. Não há chamadas adicionais para converter identificadores em nomes.
Medido na maior escola do servidor, uma semana ocupa cerca de 100 kB e 75 ms. O intervalo está limitado a 400 dias por pedido, o que torna o pior caso conhecido e não uma surpresa no dia em que alguém pedir uma década.
Os identificadores de evento trazem o seu tipo no primeiro caráter: S para uma aula do horário, R para uma reserva — um exame, uma reserva de sala, uma reunião, uma sessão de laboratório.
O que a API expõe
- Horários, por grupo de estudantes, docente, sala ou disciplina — ou a escola inteira de uma vez
- Detalhe completo de um único evento, incluindo a hierarquia de curso, ano, ramo e grupo por trás de cada grupo que o frequenta
- Os limites do ano letivo publicado, para que um cliente possa impedir o utilizador de navegar para semanas que não podem conter dados
- Feriados, para que um dia vazio seja lido como feriado e não como dados em falta
- Notificações associadas a uma escola, um grupo, uma disciplina ou um docente, sem duplicados e devolvidas como objetos estruturados
- Listas de códigos para cursos, ramos, grupos, docentes, salas e disciplinas — os identificadores e etiquetas a partir dos quais se constrói um seletor
- Capacidade da sala, código da sala e a caixa de correio da própria sala da escola, quando a escola os preencheu
- O horário de toques da escola, porque a duração dos períodos não é igual em todo o lado
- Os números de semana da própria escola e o nome que a escola dá a uma semana, quando o tem — um número de semana neste produto não é a semana ISO do ano civil, e nenhum cliente deve alguma vez calculá-lo
- Os tipos de reserva que uma escola utiliza e as salas que cada docente pode reservar, para um cliente que ofereça reservas além de leitura
- O que cada escola permite que um cliente ofereça, para que um seletor por docente fique oculto onde os compromissos dos docentes são tratados como confidenciais
- Listas de presenças, quando uma instituição regista presenças por código QR — a lista de cada aula completa, por datas para um primeiro preenchimento e depois o que mudou desde a última chamada, para um sistema de informação dos estudantes. Dados pessoais sobre estudantes, pelo que uma conta só os lê com uma permissão própria
E as partes que pode escrever
A API é sobretudo de leitura e cada exceção está identificada. POST /v2/eventlinks associa uma ligação de reunião online a eventos individuais pelo seu identificador estável — a ligação sobrevive à próxima republicação a partir da aplicação de ambiente de trabalho, e uma ligação introduzida pelo responsável do horário prevalece sobre uma enviada. POST /v2/student-registration permite a um sistema de informação dos estudantes indicar a que grupos e épocas de disciplinas um estudante pertence. PUT /v2/lecturer-language define o idioma em que o PDF do horário próprio de um docente é escrito, para instituições que lecionam em mais de um.
Cada uma está desativada, a menos que a sua conta esteja explicitamente autorizada a usá-la, e cada uma comunica resultados por item em vez de falhar o lote inteiro porque um código de disciplina foi mal digitado.
Reservas de salas, feitas por uma pessoa e não por uma conta
A reserva é a única parte da API que não utiliza de todo uma conta de integração, e a razão merece ser dita com clareza: uma reserva é feita por alguém, e o horário regista quem. Um membro do pessoal inicia sessão com o seu próprio nome de utilizador e palavra-passe, recebe um token que identifica uma escola e dura oito horas, e cria, altera e elimina reservas em nome próprio — o que é também a razão por que uma credencial compilada numa aplicação publicada nunca pode chegar a esta superfície.
Antes de escrever o que quer que seja, um cliente pode perguntar se um padrão está livre. GET /v2/free-busy expande todas as terças-feiras alternadas de março a maio, 08:00–10:00, sala B-004 em datas reais e comunica, data a data, o que já está no caminho — e qual deles é: a sala, o docente ou o grupo. Um conflito é recusado com as datas em conflito anexadas e não com um simples não, juntamente com as horas de início mais próximas e as outras salas que estão livres em todas essas datas. Um planeador que o queira mesmo pode reservar por cima do conflito, e isso fica registado como uma decisão deliberada e não escondido.
Toda a superfície — iniciar a sessão de uma pessoa, os tipos de reserva da escola, a lista de salas permitidas de cada docente, a disponibilidade e criar, alterar e eliminar uma reserva — constitui o capítulo 13 do manual, com um exemplo prático que vai do início de sessão a uma sala reservada.
Concebida para um cliente que consulta periodicamente
Cada resposta traz um ETag. Repita o pedido com If-None-Match e um horário inalterado responde 304 sem corpo algum, que é o caso comum de um ecrã num átrio que se atualiza a cada poucos minutos. Um cliente bem comportado transfere quase nada num dia calmo.
As credenciais são trocadas uma vez por um token de portador que dura 24 horas e codifica as escolas que pode ler. As aplicações de navegador são suportadas através de uma lista explícita de origens permitidas e não de um caráter universal — diga-nos a origem a partir da qual o seu painel é servido e ela é acrescentada.
Erros que dizem o que correu mal
Um código de escola mal digitado, uma escola que a sua conta não pode ler e uma semana que genuinamente não tem aulas são três situações diferentes, e uma integração que mostra a mesma mensagem para as três faz perder a tarde a alguém. São 400 unknown_school, 403 school_not_permitted e um perfeitamente normal 200 com uma lista vazia.
Cada falha devolve um código de erro estável e legível por máquina, uma frase em inglês e, muitas vezes, uma sugestão. Um 500 traz um identificador de referência; cite-o e as linhas exatas do registo podem ser encontradas de imediato.
A superfície mais antiga continua a ser servida e continua congelada
As instituições que se integraram na API anterior não viram a sua integração quebrada pela v2. Os caminhos antigos continuam a ser servidos e estão deliberadamente congelados, e a v2 mantém de propósito os nomes de campos antigos — pelo que passar para a v2 é uma mudança de URL e não uma mudança de analisador, e os campos que a v2 acrescenta são adições e não substituições.
Esta é toda a política numa só frase: uma API sobre a qual uma universidade constrói é uma promessa, e quebrá-la para arrumar nomes de campos não é uma poupança.
Transferir o manual da API
- Wise Timetable REST API — Integration Manual (PDF)Todos os pontos de acesso com os seus parâmetros e uma resposta de exemplo, autenticação, cache, códigos de erro, limites e exemplos completos de integração em curl, Python, JavaScript e C.
- Wise Timetable — Importing Companion (PDF, 112 páginas)A contrapartida baseada em ficheiros: todas as importações CSV standard, os códigos de importação personalizados e todas as operações personalizadas, com exemplos.
Capacidades relacionadas
Veja o Wise Timetable com os seus próprios dados
Marque uma apresentação online de 45 minutos. Percorreremos o problema de planeamento da sua instituição, mostraremos como o Wise Timetable o trata e responderemos ao que a sua equipa quiser testar.