Nesta receita de livro de receitas de API, examinaremos as APIs específicas que o exemplo usa para recuperar cursos, departamentos e semestres.
Antes de examinarmos as APIs, vamos examinar a hierarquia típica dos tipos OrgUnit padrão:
No diagrama, vemos que os semestres são os filhos diretos da unidade organizacional raiz, portanto, podemos recuperar uma lista de todos os semestres usando o método API de estrutura organizacional para solicitar uma lista de filhos da organização raiz e limitar os resultados a objetos semestrais especificando seu ouTypeId. Neste exemplo, os semestres têm um ouTypeId de 5 e a organização raiz tem um orgUnitId de 6606.
GET /d2l/api/lp/1.0/orgstructure/6606/descendants/?ouTypeId=5Response:200 OK[{"Identificador": "121194","Nome": "Semestre de outono de 2012","Código": "Outono de 2012","Tipo": {"Id": 5,"Código": "Semestre","Nome": "Semestre"}{"Identificador": "122037","Nome": "Semestre de inverno de 2013","Código": "Inverno de 2013","Tipo": {"Id": 5,"Código": "Semestre","Nome": "Semestre"}}}]
Semelhante aos semestres, os departamentos também são filhos diretos da organização raiz. Assim, podemos obter uma lista de departamentos recuperando os filhos da organização raiz e limitando os resultados especificando o ouTypeId dos departamentos. Neste exemplo, o outTypeId para departamentos é 203.
GET /d2l/api/lp/1.0/orgstructure/6606/children/?ouTypeId=203Response:200 OK[{"Identificador": "121162","Nome": "Ciência Atuarial","Código": "ACTSC","Tipo": {"Id": 203,"Código": "Departamento","Nome": "Departamento"}},{"Identificador": "121139","Nome": "Filosofia","Código": "PHIL","Tipo": {"Id": 203,"Código": "Departamento","Nome": "Departamento"}},{"Identificador": "121140","Nome": "Comunicação de Artes Digitais","Código": "DAC","Tipo": {"Id": 203,"Código": "Departamento","Nome": "Departamento"}}]
Intuitivamente, podemos recuperar os modelos de curso dentro de um departamento, listando seus filhos. Neste exemplo, gostaríamos de visualizar o modelo de curso para o departamento de Ciências Atuariais que tem um orgUnitId de 121162.
GET /d2l/api/lp/1.0/orgstructure/121162/children/Response:200 OK[{"Identificador": "121195","Nome": " Cursos de Ciências Atuariais do 2º ano","Código": "ACTSC_COURSE_TEMPLATE","Tipo": {"Id": 2,"Código": "Modelo de Curso","Nome": "Modelo de Curso"}}]
Semelhante à recuperação de uma lista de modelos de curso em um departamento, podemos fazer uma chamada de API para obter a lista de cursos em cada modelo individual. Neste exemplo, nossa consulta busca a lista de cursos de Ciências Atuariais do 2º ano.
GET /d2l/api/lp/1.0/orgstructure/121195/children/Response:200 OK[{"Identificador": "121196","Nome": "Matemática do Investimento","Código": "ACTSC221","Tipo": {"Id": 3,"Código": "Oferta de Curso","Nome": "Oferta de Curso"}},{"Identificador": "121197","Nome": "Matemática de Finanças","Código": "ACTSC231","Tipo": {"Id": 3,"Código": "Oferta de Curso","Nome": "Oferta de Curso"}},{"Identificador": "121198","Nome": "Introdução à Matemática Atuarial","Código": "ACTSC232","Tipo": {"Id": 3,"Code": "Oferta de Curso","Name": "Oferta de Curso"}}]
Também podemos buscar os cursos listados em todos os modelos de um departamento listando todos os seus descendentes (filhos e seus filhos) e, em seguida, limitando os resultados especificando o ouTypeId para um objeto de curso. Neste exemplo, nossa consulta buscará todos os cursos do departamento de Ciências Atuariais especificando o ouTypeId de 3.
GET /d2l/api/lp/1.0/orgstructure/121162/descendants/?ouTypeId=3Response:200 OK[{"Identificador": "121196","Nome": "Matemática do Investimento","Código": "ACTSC221","Tipo": {"Id": 3,"Código": "Oferta de Curso","Nome": "Oferta de Curso"}},{"Identificador": "121199","Nome": "Contingências de Vida 1","Código": "ACTSC331","Tipo": {"Id": 3,"Código": "Oferta de Curso","Nome": "Oferta de Curso"}},{"Identificador": "121204","Nome": "Gerenciamento de Ativos e Passivos","Código": "ACTSC445","Tipo": {"Id": 3, "Code": "Oferta de Curso","Name": "Oferta de Curso"}}]
No diagrama, vemos que os filhos de um semestre são as ofertas de cursos listadas durante esse semestre. Para buscar uma lista de todos os cursos em um semestre, usamos a API para listar os filhos no orgUnitId do semestre. Neste exemplo, recuperaremos os filhos do semestre de outono de 2013, que tem um OrgUnitId de 121194.
GET /d2l/api/lp/1.0/orgstructure/121194/children/Response:200 OK[{"Identificador": "121198","Nome": "Introdução à Matemática Atuarial","Código": "ACTSC232","Tipo": {"Id": 3,"Código": "Oferta de Curso","Nome": "Oferta de Curso"}},{"Identificador": "121702","Nome": "Álgebra para Matemática Hons","Código": "MATH135","Tipo": {"Id": 3,"Código": "Oferta de Curso","Nome": "Oferta de Curso"}},{"Identificador": "121243","Nome": "Introdução à Estrutura e Função da Planta","Código": "BIOL120","Type": {"id": 3,"Code": "Oferta de Curso","Name": "Oferta de Curso"}}]
Por outro lado, se quisermos saber quando um determinado curso está sendo oferecido, podemos fazer uma chamada de API para buscar a lista de todas as ofertas de cursos. Neste exemplo, especificamos o 121198 orgUnitId do curso e o ouTypeId para o semestre.
GET /d2l/api/lp/1.0/orgstructure/121198/parents/?outypeid=5Response:200 OK[{"Identificador": "121194","Nome": "Semestre de outono de 2012","Código": "Outono de 2012","Tipo": {"Id": 5,"Código": "Semestre","Nome": "Semestre"}},{"Identificador": "122037","Nome": "Semestre de inverno de 2013","Código": "Inverno de 2013","Tipo": {"Id": 5,"Código": "Semestre","Nome": "Semestre"}}]
A partir deste exemplo, podemos ver que o curso está sendo oferecido no semestre de outono de 2012 e no semestre de inverno de 2013.
Como vimos, existem várias abordagens para pesquisar cursos usando as APIs.