From Ape Wiki

(Redirected from Protocol/fr)
Jump to: navigation, search
Cette page couvre le protocole 1.0 d'APE

Contents

[edit] Fondamentaux du protocole APE

[edit] Requêtes au serveur

Les variables POST ou GET sont autorisées en tant que méthode HTTP. La requête de l'URL (si c'est GET qui est utilisé) ou le corps de la requête (si c'est POST qui est utilisé) doivent être ajoutés après le ? avec la valeur d'un tableau encodé en JSON.

Les requêtes au serveur sont faites sur l'URL suivante:

http://[Frequency].[Server URL]/?

Exemple GET:

GET /?[{"cmd":"CONNECT","chl":0,"params":{"transport":0}}] HTTP/1.1
Host: 0.ape.ape-project.org

Exemple POST:

POST /? HTTP/1.1
Host: 0.ape.ape-project.org
 
[{"cmd":"CONNECT","chl":0,"params":{"transport":0}}]

L'entête Host (hôte) est utilisé pour détecter un nouveau sous-utilisateur, cette caractéristique permet de multiples fenêtres/tabs. Voir Session pour davantage d'information.

[edit] Raw et Command

Le protocole APE fonctionne avec un système de Raw et Command. Raws et Commands sont au format JSON. Elles sont toujours envoyées en tant que tableau JSON, chaque entrée du tableau est un objet JSON représentant soit un Raw, soit une Command.

[edit] Raw

Un raw réfère à des données envoyées par le serveur au client. Un raw est un objet JSON avec les clés suivantes obligatoires:

  • raw: Nom du Raw
  • time: Heure du serveur à l'envoi du Raw
  • data: Un objet JSON

[
    {
        "raw":"<nom du raw>",
        "time":"<Heure d'envoi du raw>",
        "data":{}
    }
]

[edit] Command

Une command réfère aux données envoyées depuis le client au serveur. Une commande est un objet JSON avec les clés suivantes obligatoires:

  • cmd: Nom de la Command
  • chl: Challenge, le challenge (défi) est un entier incrémenté à chaque requête envoyée au serveur.

[
    {
        "cmd":"<Nom de la Command>",
        "chl":<challenge (défi)>
    }
]

TODO : Sessid? Renvoi de retour interdit?


[edit] Transport

TODO

[edit] Stockage côté Serveur

Ce protocole permet de stockage de variable côté serveur. Le client peut stocker des paires de clés/valeurs sur le serveur. Les valeurs sont stockées jusqu'à ce que l'utilisateur se déconnecte ou dépasse le délai d'attente (timeout). Pour plus d'information, voir stocker un raw et récupérer une Command.

[edit] Identification

Le client initie une négociation de connexion en envoyant une Command CONNECT.

[
    {"cmd":"CONNECT","chl":0,"params":{"transport":0}}
]

Pour plus d'information, voir référence de la Command connect

Le serveur répond avec 2 raws:

[
    {"raw":"LOGIN","time":"1253633967","data":{"sessid":"4622c258248931a7dfb081542eaf589f"}},
    {"raw":"IDENT","time":"1253633967","data":{"user":{"casttype":"uni","pubid":"5288a462f528d3609777f31872d31c8d"}}}
]

Pour plus d'information, voir référence d'un raw d'identification et ident

TODO : Expliquer le sessid? Réparer des liens cassés?

[edit] Session

Le protocole APE dispose d'une caractéristique session. Cette caractéristique est utilisée pour traiter de multiples fenêtres/tabs. Chaque fenêtre/tab doit utiliser une URL différente pour se connecter au serveur. Si le serveur détecte dans les entêtes HTTP un hôte différent depuis le même client (le client est identifié avec puid), il doit d'abord envoyer un Raw IDENT ou CHANNEL (si l'utilisateur est sur n'importe quel canal). Chaque Raw envoyé par le serveur doit être envoyé aux autres clients. Cette caractéristique est aussi utilisée pour restaurer l’état d'une application après qu'un utilisateur a rafraîchi la page.

Voici une exemple de session:

Client 0:

POST /? HTTP/1.1
Host: 0.ape.ape-project.org
 
[{"cmd":"CONNECT","chl":0,"params":{"transport":0}}]

Le Serveur répond au client 0 :

[{"raw":"LOGIN","time":"1253633967","data":{"sessid":"4622c258248931a7dfb081542eaf589f"}}, {"raw":"IDENT","time":"1253633967","data":{"user":{"casttype":"uni","pubid":"5288a462f528d3609777f31872d31c8d"}}}]

Client 1 : (l'utilisateur a ouvert une nouvelle fenêtre)

POST /? HTTP/1.1
Host: 1.ape.ape-project.org
 
[{"cmd":"CHECK","chl":1,"sessid":"4622c258248931a7dfb081542eaf589f"}]

Le serveur répond au client 1 :

[{"raw":"LOGIN","time":"1253633967","data":{"sessid":"4622c258248931a7dfb081542eaf589f"}}, {"raw":"IDENT","time":"1253633967","data":{"user":{"casttype":"uni","pubid":"5288a462f528d3609777f31872d31c8d"}}}]

Client 1 : (l'utilisateur à rejoint un canal)

POST /? HTTP/1.1
Host: 1.ape.ape-project.org
 
[{"cmd":"JOIN","sessid":"4622c258248931a7dfb081542eaf589f","chl":1,"params":{"channels":["testChannel"]}}]

Le serveur répond au client 0 et 1:

{"raw":"CHANNEL","time":"1253640697","datas":{"pipe":{"properties":{"name":"testChannel"},"casttype":"multi","pubid":"2f50f03539dfe782e233d0a76205b3f3"},"users":[{"level":"1","casttype":"uni","pubid":"4622c258248931a7dfb081542eaf589f"}]}}