assemblee-virtuelle / assemblee-virtuelle/semapps

GraphQLDP

Open
#697 3 comments 0 reactions 0 assignees View on GitHub
chantier feature
Dominant language
TypeScript
Stars
103
Forks
14
Avg merge
1m
Merged PRs (30d)
2

Description

Idée: transformer un API GraphQL en serveur LDP, avec ses containers et ses ressources.

Pourrait servir pour ouvrir en sémantique les données de [toutes les instances Mobilizon](https://docs.joinmobilizon.org/contribute/graphql_api/), [Open Collective](https://graphql-docs-v2.opencollective.com/), [Github](https://docs.github.com/en/graphql), et beaucoup d'autres services.

Par exemple si on POST sur https://mobilizon.fr/api cette requête (potentiellement via l'interface https://mobilizon.colibris-outilslibres.org/graphiql):

```
query {
events {
elements {
id,
url,
title,
description,
beginsOn,
endsOn,
status,
picture {
url
},
physicalAddress {
id,
description,
locality
}
}
total
}
}
```

On obtient tous les événements Mobilizon de l'instance de Framasoft:

```
{
"data": {
"events": {
"elements": [
{
"beginsOn": "2021-04-15T10:30:00Z",
"description": "

Rendez-vous au marché de Malakoff

  • de 12h30 à 13h30 : pour la collecte des invendus.

Rendez-vous au local de Tinhï Kmou (43 bd Gustave Roch)

  • de 13h30 à 14h30 : pour le tri des denrées, avant redistribution.

  • de 14h30 à 16h30 : pour un moment de convivialité et pour prêter main forte en fonction des besoins.

  • de 16h30 à 17h30 : pour la redistribution (qui commence à 16h45, mais il vaut mieux s'y préparer pour 16h30)

Si vous ne pouvez pas venir pour toute l'après-midi, mais uniquement une partie, pas de souci, précisez-le juste en commentaire ! ;)

Il y a toujours une petite équipe sur les lieux, même si elle ne confirme pas sur Mobilizon. Donc ne vous fiez pas au "Personne n'y va" ! ^^'

",
"endsOn": "2021-04-15T15:30:00Z",
"id": "119518",
"physicalAddress": {
"description": "Place Rosa Parks",
"id": "2175",
"locality": "Nantes"
},
"picture": {
"url": "https://mobilizon.fr/media/6501928564953590f727739b4754684b43b4293d4c65c43e17a8ebe9b0cc2049.jpg?name=IMG_20210119_142939.jpg"
},
"status": "CONFIRMED",
"title": "JEUDI : Collecte marché de MALAKOFF, tri & distribution",
"url": "https://mobilizon.fr/events/3a7f78db-17c1-4b98-b4c4-88f7be6e1f95"
},
{
"beginsOn": "2021-04-15T18:30:00Z",
"description": "

La soirée de la SCL du jeudi 15 avril aura pour thème

",
"endsOn": "2021-04-15T21:30:00Z",
"id": "122113",
"physicalAddress": null,
"picture": {
"url": "https://mobilizon.fr/media/b5fef32cb2e9b6dae03901700637d9fef3b78cb4d6d26bfc3bb55bd549beb396.png?name=Banner.png"
},
"status": "CONFIRMED",
"title": "Soirée de Conversations autour du Libre (SCL) du jeudi 15 avril 2021",
"url": "https://mobilizon.parinux.org/events/e51b7419-c05d-46bd-8c74-2bca0930af17"
},
...
],
"total": 121
}
}
}
```

Pour de la lecture, il suffirait de proposer un container LDP `/events` qui renverrait ces données sous forme de `pair:Event` (par exemple). En terme de configuration, il suffirait d'indiquer le mapping entre données non-sémantiques et sémantiques. Grâce à GraphQL, on ne demanderait que les données qu'on veut mapper.

On pourrait ensuite aggréger les données sur une instance SemApps (https://github.com/assemblee-virtuelle/semapps/issues/674)

Pour de l'écriture, ça demanderait de faire appel à des mutations GraphQL et de gérer l'authentification correctement. Plus compliqué mais pas impossible.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the Mobilizon GraphQL API example and the linked SemApps issue #674. Define the read-only scope around an LDP /events container, configurable mappings, and the expected semantic output before considering GraphQL mutations or authentication.

Written by the indexing model from the issue text.

Assessment

Tech stack
graphql, typescript
Domain
api, backend-api-design
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.