jeudi 24 décembre 2009

Joyeux Noël

A tous mes lecteurs,
Habitués et Occasionnels,
Contributeurs et Commentateurs,

Je vous souhaite à tous un

Joyeux Noël

jeudi 17 décembre 2009

Passerelle entre un serveur Apache et une Application

Bonjour,

Aujourd'hui je vais tenter de vous montrer comment utiliser le protocole HTTP pour le détourner à vos propre besoin.

Tout le monde le sais, le protocole HTTP est très utilisé. C'est le protocole qui est le plus souvent autorisé à passer simplement au travers des nombreuses protections actuelles (proxy, firewall, etc...)

Plus tôt que de vous livrer du code, je vous livre une methodologie. Je vous la livre telle que je l'ai utiliser pour l'un de mes progiciels.
L'utilisation de requête HTTP est simple mais peu aussi se révélé peu sécurisée. En premier lieu il ne faut pas utiliser cette méthode pour le transfert de donnée sensible.
La première chose à faire est d'interdire l'accès au navigateurs sur les API accessibles depuis l'application. L'API doit refuser de répondre à quiconque ne disposant pas de l'Agent ID voulu.
Après la vérification de l'Agent ID, nous utiliserons les entêtes HTTP pour faire transiter les données.
Le nom des entêtes commence par X et ressemble à ceci : X_PRODUCT_ID par exemple. Du côté PHP elle sera acessible dans la variable surper globale $_SERVER['HTTP_X_PRODUCT_ID'].
Même chose pour les réponses, PHP retourne certaines données telle qu'une erreur via une entête (ex. header('X_API_ERROR: Erreur 2 !')). Laissant ainsi le corps de la réponse disponible pour un fichier XML qui pourra être traité par le logiciel ayant envoyé la requête.

L'avantage de ce cette méthode est que sont implémentation en Cocoa sur Mac Os X et est rétro-compatible avec Mac Os X 10.0 à 10.6 ! Elle est également rapide à mettre en oeuvre avec QT 4.5 !
Rendant ainsi le développement de logiciel serveur réduit à une API pouvant utilisé un framworks. Une limitation de taille est également présente. Il n'est pas possible d'envoyer une requette HTTP de plus de 2Go tout compris. Dans ce cas, rien ne vous empèche de tranférer par morceau !