25
Bonjour, nous allons parler aujourd’hui d’une nouvelle technologie appelée Thrift.
Tout d’abord, un peu d’histoire… Thrift est un framework RPC (Remote Procedure Call) développé par Facebook afin de permettre un développement évolutif cross-langage. Il est composé d’une stack software ainsi que d’ un générateur de code permettant de construire des services fonctionnant efficacement entre différents langages tels que le C++, le C#, le Java (pour notre ami Android), le Perl, le Python, le PHP, le Erlang, le Ruby, ainsi que bien sûr, notre plus fidèle compagnon, l’Objective C. Maintenant open source, ce projet est incubé chez Apache (http://incubator.apache.org/thrift/). Le fonctionnement est plutôt simple, il vous suffit d’écrire les fichiers de description (d’extension .thrift, ca ne s’invente pas), et d’utiliser votre générateur de code. Ces fichiers représentent tout simplement un objet avec les méthodes éventuelles que vous voulez appliquer dessus. Par exemple ci-dessous, nous avons la description d’un UserProfile, contenant 3 attributs (uid, name et job), ainsi que deux « remote » méthodes (store et retrieve).
struct UserProfile {
1: i32 uid,
2: string name,
3: string job
}
service UserStorage {
void store(1: UserProfile user),
UserProfile retrieve(1: i32 uid)
}
A partir de la, il vous suffit de générer votre code à l’aide de votre shell en tapant la commande suivante :
<em>#thrift --gen cocoa UserProfile.thrift</em>
Vous obtenez alors deux fichiers, UserProfile.h et UserProfile.m, vous permettant d’échanger ces « UserProfile » avec votre serveur. Il faut bien évidemment auparavant vous assurer de bien mettre le framework thrift dans votre projet (ici puis /lib/Cocoa), permettant le transport au niveau réseau de notre UserProfile.
Bon, jusque la, vous n’êtes pas convaincu, et pourtant, tant au niveau du développement serveur que mobile, c’est un pur bonheur, mais laissez moi vous convaincre avec les arguments suivant :
- La serialisation cross langage avec un overhead bien plus bas que des alternatives comme soap, due au format binaire utilisé (Très rapide).
- Un gain de temps énorme au niveau du code. Vous ne codez plus ni les objets, ni le transport (encodage et decodage XML ou JSON comparativement) de ceux-ci. Une simple ligne de commande et tout est généré et optimisé.
- La couche applicative ainsi que la couche de serialisation sont totalement distinctes, ce qui vous permet de les modifier indépendamment.
- La cross-langage serialisation, vous permettant de développer simultanément iPhone et Android ou autre!
- C’est libre et gratuit!
L’application Fortuneo disponible sur l’AppStore fonctionne avec cette technologie, on peut constater une grande rapidité, ainsi que, pour l’avoir développée, une très grande rapidité d’implémentation. Essayez Thrift et je vous garantis que vous oublierez XML et JSON. Après tout cela, vous allez me dire que cela semble trop simple. En effet, une difficulté réside cependant dans l’installation du générateur de code, pour nous, gourou du Mac. Heureusement, il vous suffit de suivre le tutoriel suivant qui vous guidera pas à pas dans l’installation!
INSTALLATION THRIFT MAC OS X ET IPHONE
- Télécharger thrift ici
- Décompresser alors le fichier téléchargé en 1)
- A l’aide d’un invite de commande, placez vous dans le répertoire précédemment décompressé.
- Toujours avec cette invite de commande, lancer successivement les commandes suivantes :
<em># sudo ./configure </em> <em># sudo make </em> <em># sudo make install </em>
Le compilateur Thrift est maintenant installé sur votre machine
Générer du code Cocoa: Lancer une invite de commande. Exécuter alors la commande suivante dans le répertoire contenant votre fichier de description (ici UserProfile.thrift):
<em> # thrift --gen cocoa UserProfile.thrift </em>
Vos fichiers sont alors générés dans un répertoire nommé gen-cocoa/
Vous pouvez télécharger thriftSample, un petit sample code cocoa, fonctionnant sur notre serveur.
Paul-Anatole CLAUDOT

[...] Thrift semble très orienté multi plateforme (coté serveur et coté terminal) – pas encore de page WP francophone. (merci à @_Stephane_ ) [...]