<page xmlns="http://projectmallard.org/1.0/"
      type="topic" id="api-schema" xml:lang="fr">

<info>
  <link type="guide" xref="index#api" />
  <revision docversion="0.1" date="2013-01-04" status="draft"/>
  <credit type="author">
    <name>Frédéric Péters</name>
    <email>fpeters@entrouvert.com</email>
  </credit>
  <desc>Formulaires, profils utilisateur, etc.</desc>

</info>

<title>Accès aux listes et schémas de données</title>

<p>
w.c.s expose une API permettant aux logiciels tiers de connaître les différents
formulaires et leurs schémas de données.
</p>

<note><p>Toutes cs URL sont conformes à la spécification de remontée d'information du
<em>Portail citoyen</em>, acceptent ainsi un paramètre <code>email</code> ou
<code>NameID</code>, et nécessitent alors un paramètre <code>orig</code>.
</p></note>


<section id="forms">
  <title>Formulaires</title>

<p>
La liste des formulaires accessibles à un utilisateur est disponible à
la racine du site, quand un entête <code>Accept: application/json</code>
est transmis, ou à une URL <code>/json</code> autrement.
</p>

<screen>
<output style="prompt">$ </output><input>curl -H "Accept: application/json" \
       https://www.example.net/</input>
<output>
[{"url": "https://www.example.net/inscriptions/newsletter",
  "title": "Newsletter",
  "slug": "newsletter",
  "count": 17,
  "authentication_required": false,
  "redirection": false,
  "category": "Inscriptions"},
 {"url": "https://www.example.net/inscriptions/piscine",
  "title": "Piscine",
  "slug": "piscine",
  "count": 6,
  "authentication_required": true,
  "redirection": false,
  "category": "Inscriptions"}
]
</output>
</screen>

<p>
Les formulaires d'une catégorie précise sont disponibles de la même manière, à
la racine de la catégorie.</p>

<screen>
<output style="prompt">$ </output><input>curl -H "Accept: application/json" \
       https://www.example.net/inscriptions/</input>
</screen>

</section>


<section id="categories">
   <title>Catégories</title>

<p>
La liste des catégories est disponible à l'URL <code>/categories</code>.
</p>

<screen>
<output style="prompt">$ </output><input>curl -H "Accept: application/json" \
       https://www.example.net/categories</input>
<output>
{"data":
  [
   {"url": "https://www.example.net/inscriptions/",
    "slug": "inscriptions",
    "title": "Inscriptions",
     "description": "&lt;p&gt;Pour vous et vos enfants...&lt;/p&gt;" },
   {"url": "https://www.example.net/etat-civil/",
    "slug": "etat-civil",
    "title": "État civil"}
  ]
}
</output>
</screen>

</section>


<section id="roles">
  <title>Rôles</title>

<p>
La liste des rôles est disponible à l'URL <code>/api/roles</code>.
</p>

<screen>
<output style="prompt">$ </output><input>curl -H "Accept: application/json" \
       https://www.example.net/api/roles</input>
<output>
{"data":
  [
   {"id": 1,
    "text": "Gestionnaires formulaires",
    "slug": "gestionnaires-formulaires"},
   {"id": 2,
    "text": "Usagers privilégiés",
    "slug": "usagers-privilegies"}
  ]
}
</output>
</screen>

</section>


<section id="data-schema">
  <title>Schéma de données d'un formulaire</title>

<p>
Le schéma de données d'un formulaire est accessible en ajoutant
<file>/schema</file> à son URL, par exemple le contenu suivant est
obtenu à l'adresse
<code>http://www.example.net/inscriptions/newsletter<em>/schema</em></code>.
</p>

<code mime="application/json">
{
    "name": "Newsletter",
    "only_allow_one": "false",
    "enable_tracking_codes": "true",
    "confirmation": "true",
    "discussion": "false",
    "fields": [
        {
            "label": "Nom",
            "required": "True",
            "type": "string",
            "varname": "nom"
        },
        {
            "label": "Pr\u00e9nom",
            "required": "True",
            "type": "string",
            "varname": "prenom"
        },
        {
            "label": "Adresse \u00e9lectronique",
            "required": "True",
            "type": "email",
            "varname": "email"
        }
    ]
}
</code>

</section>


</page>
