IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

REST Discussion :

Rest Tutorial Php


Sujet :

REST

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 68
    Points : 48
    Points
    48
    Par défaut Rest Tutorial Php
    Bonjour a tous.

    Je dois concevoir rapidement une maquette utilisant Rest sous PHP.
    Je souhaiterais donc écrire un serveur Rest(Sans framework), et un client (Sans la lib Curl).

    Je m'y connais en Ws Soap, mais je n'ai jamais utiliser la methodologie REST.

    Je suis a la recherche d'un tuto, qui me fournisse un code d'exemple aussi. Actuellement, j'ai trouvé des milliers de tuto sur Google, mais je n'en trouve aucun qui saurait tout me définir, j'ai cherché sur Koder, et je ne trouve rien non plus.

    Il y a toujours un gros point noir pour moi, qui est la partie url_rewrite pour faire partir l'adresse logique sur une page physique qui interprète ceci. Et l'autre point noir c'est la dite page (J'imagine le Controler rest) qui va dispatcher sur les bonnes pages.

    Si quelqu'un posséde des sources simple mettant en avant la communication Rest, que je puisse deployer sur mon serveur apache (Une partie cliente et une partie serveur), il est le bienvenu.

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Bonsoir,

    Faire un bout de code qui implémente un service REST de base n'est pas si compliqué, et vous pouvez vous inspirer de l'exemple ici qui à défaut d'être meilleur qu'un autre couvre les différents points à adresser.

    Réaliser cela sans framework c'est autre chose car il faut une logique MVC et un dispatcher qui sache associer URI au contrôleur: en gros l'équivalent de ce que fait Rails (de Ruby on Rails)... et pour bien faire avoir un ORM de type active pattern.
    On peut considérer que le but du framework est de vous permettre de réaliser un service REST en écrivant le moins de lignes de code possible.
    Et si vous regardez comment cela doit être construit pour que çà le fasse, c'est quand même un peu ardu.

    cakePHP fait un peu cela et vous avez des exemples de mise en œuvre de services REST avec.

    Bon courage
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 68
    Points : 48
    Points
    48
    Par défaut
    Merci pour les exemples, le premier lien est effectivement celui que j'ai suivi.

    Je suis bien arrive a monter un serveur Rest et un client pour communiquer.

    Mais je pense que la méthodologie Rest ne s'applique pas a mon cas. Toutefois, un avis extérieur serait le bien venu.

    Voici l'exemple que je pense développer avec Soap plutot qu'avec Rest:

    2 Ressources :
    Eleves - Contenant des infos diverses sur l'eleve
    Devoirs - Trié par classe et type, chaque devoir et lié a un eleve.

    Le but étant de permettre de recuperer tous les devoirs de tous les eleves et de tous les traiter.

    4 Fonctions :
    1. GetNbDevoir
    2. GetEleve
    3. GetDevoir
    4. SetDevoir


    La fonction GetNbDevoir prend 2 arguments : L'ID d'eleve et l'etat du devoir (Traiter ou en attente de traitement ou les deux)
    GetEleve prend 1 argument, l'ID d'eleve, que remonte les infos sur un eleve en particuliers.
    GetDevoir prend plusieurs arg: (Numéro d'eleve, quantité max, type de devoir, classe de l'eleve, etat du devoir) ou (Numero de devoir)
    SetDevoir prends 1 args: L'Id du devoir pour faire passe l'etat de attente de traitement a traie.


    Je pense que la fonction 2 et 3 s'appliquent bien a la méthode Rest, mais que les méthodes 1 et 4, ne correspondent pas a cette méthode.

    Qu'en pensez vous?

    Me conseillez vous Rest ou Soap? De ce que j'ai lu Soap est plus adapte, mais je ne suis pas un expert en Rest.


    Merci d'avance pour vos conseil.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Hmmm
    Une des grosses difficultés pour REST est de penser ReST.
    Ce qui suppose définir des ressources i.e. des "noms" et se limiter à des opérations HTTP POST, GET, ...
    Ce sont les seules méthodes que vous pouvez appliquer aux ressources.

    La ressource est une URI et ce que fait le serveur avec les requêtes qu'il reçoit sur ces URI est "ouvert" mais pas n'importe quoi non plus!

    Si vous pensez fonctions arguments vous êtes dans du XML-RPC/SOAP... vous pensez "méthodes"/verbe et non ressource/noms.
    C'est un "paradigm shift" pas si facile à faire lorsque vous venez du monde objet. Un objet c'est un nom et des comportements (behaviors/methodes).
    Une ressource ReST c'est une URI et quelques méthodes HTTP.

    2 Ressources :
    Eleves - Contenant des infos diverses sur l'eleve
    Devoirs - Trié par classe et type, chaque devoir et lié a un eleve.
    Vous pensez "tables" d'un modèle relationnel.
    En jargon ReST, nous dirions plutôt: /rest_ressources/eleves est l'URI de la ressource qui permet d'accéder à la collection de ressources eleves.
    "chaque devoir est lié a un eleve" se traduit par une "descente" dans la ressource élève:
    /rest_ressources/eleves/[ident]/devoirs
    qui donne accès à la liste des devoirs de l'élève [ident], et:
    /rest_ressources/eleves/[ident]/devoirs/[ident_devoir]
    pour accéder à un devoir particulier.

    Classes (/rest_ressources/classes): elle défini une collection d'élèves
    Devoirs (/rest_ressources/devoirs): pour la collection des devoirs indépendamment des élèves...

    La fonction GetNbDevoir prend 2 arguments : L'ID d'eleve et l'etat du devoir (Traiter ou en attente de traitement ou les deux)
    Quel est le nombre de devoir que l'élève à fait ou a à faire?
    C'est quelque chose associé à élève et qui pourrait très bien figurer dans les attributs de la représentation d'état retournée par GET sur l'URI /rest_ressources/eleves/[ident]
    Vous pourriez aussi vouloir récupérer des "listes de" et dans ce cas passer par l'URI /rest_ressources/eleves/[ident]/devoirs

    Pour faire un query en fonction de l'état "fait", "à faire", vous pourriez l'exprimer:
    /rest_ressources/eleves/[ident]/devoirs?etat=fait
    => ca va retourner une liste de... URI vers des devoirs faits par l'élève ident

    SetDevoir prends 1 args: L'Id du devoir pour faire passe l'etat de attente de traitement a traie.
    Puisqu'on change l'état, c'est au moins un POST(*), l'URI de la ressource pourrait être:
    /rest_ressources/eleves/[ident]/devoirs/[ident_devoir]
    Dans le corps du message, vous pouvez indiquer ce que vous voulez.
    (*) ou PUT, ou EDIT mais on va pas chipotter

    Pour l'instant, nous n'avons travaillé que sur l'API présentée aux applications pour leur permettre d'échanger les représentations d'état. Nous n'avons rien dit sur le schéma de la BDD (derrière le serveur ReST). Comme dans le cas de services SOA, ce qui se passe derrière la scène doit rester "opaque".

    Les autres contraintes ReST pas facile à adresser lorsqu'on vient d'un monde SOA sont idempotence et stateless. Mais, çà suffit pour aujourd'hui

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 68
    Points : 48
    Points
    48
    Par défaut
    Merci beaucoup pour cette réponse. Elle confirme ma position pour ce projet, nous allons le faire en Soap.

    En effet, le SI est déjà en place, les méthodes avec leurs paramètres n'ont pas été pensé pour ce genre d'architecture, et bien que faisable sur un environnement Rest, je n'y vois que très peu d'intérêt.

    J'ai un autre projet qui lui devrait coller parfaitement au modèle REST, et je pense que je le ferais développer en suivant cette méthodologie.

    Merci a tous pour ces renseignements.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Re
    bsr a tous , est q'il ya un tutorial pour creér un webssrvice restful avec php5 ou framework zend merci

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut modélisation des services web REST
    Bonjour,

    Comment peut on modéliser/concevoir un service web Restful? Y-a-il une approche ou une démarche qui peuvent aider à faire la conception des services web développés en REST?

  8. #8
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    J'ai utiliser le package PEAR pour envoyer des requêtes vers un web service REST.Mais mon problème que mon service web accepte les données en format json et j'ai pas réussi à envoyer les données en json. Est ce que quelqu'un a une idée sur le faite d'envoyer des données sous format json dans une requête Http :
    le code est le suivant :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <?php
     
    require_once "HTTP/Request.php";
    var_dump(class_exists('Request', false));
    class RESTClient {
     
        private $root_url = "";
        private $curr_url = "";
        private $user_name = "";
        private $password = "";
        private $response = "";
        private $responseBody = "";
        private $req = null;
     
        public function __construct($root_url = "", $user_name = "", $password = "magento") {
            $this->root_url = $this->curr_url = $root_url;
            $this->user_name = $user_name;
            $this->password = $password;
            if ($root_url != "") {
                $this->createRequest("GET");
                $this->sendRequest();
            }
            return true;
        }
     
        public function createRequest($url, $method, $arr = null) {
            $this->curr_url = $url;
            $this->req =& new HTTP_Request($url);
            if ($this->user_name != "" && $this->password != "") {
               $this->req->setBasicAuth($this->user_name, $this->password);
            }
     
            switch($method) {
                case "GET":
                    $this->req->setMethod(HTTP_REQUEST_METHOD_GET);
                    break;
                case "POST":
                    $this->req->setMethod(HTTP_REQUEST_METHOD_POST);
                    $this->addPostData($arr);
                    break;
                case "PUT":
                    $this->req->setMethod(HTTP_REQUEST_METHOD_PUT);
                    // to-do
                    break;
                case "DELETE":
                    $this->req->setMethod(HTTP_REQUEST_METHOD_DELETE);
                    // to-do
                    break;
            }
        }
     
        private function addPostData($arr) {
            if ($arr != null) {
                foreach ($arr as $key => $value) {
                    $this->req->addPostData($key, $value);
                }
            }
        }
     
        public function sendRequest() {
            $this->response = $this->req->sendRequest();
     
            if (PEAR::isError($this->response)) {
                echo $this->response->getMessage();
                die();
            } else {
                $this->responseBody = $this->req->getResponseBody();
            }
        }
     
        public function getResponse() {
            return $this->responseBody;
        }
     
    }
    ?>
    Comment peut on modifier la méthode addPostData pour envoyer des données sous format json?
    Merci d'avance

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 27
    Points : 29
    Points
    29
    Par défaut
    @ wiztricks




    serait il possible de uploader l'exemple :;
    le site" gen-x-design.com" ne marche plus !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tutorial PHP : sockets
    Par Rumpel dans le forum Langage
    Réponses: 5
    Dernier message: 24/12/2011, 09h28
  2. RESTFul : Client PHP - Service JAVA
    Par chatis dans le forum REST
    Réponses: 2
    Dernier message: 20/12/2011, 10h58
  3. Service Rest en PHP
    Par zinka dans le forum Langage
    Réponses: 5
    Dernier message: 19/05/2011, 10h07
  4. restful server php
    Par altair8080 dans le forum Langage
    Réponses: 1
    Dernier message: 09/12/2009, 09h23
  5. Recherche tutorial php sur les fichiers .txt
    Par carmen256 dans le forum Langage
    Réponses: 1
    Dernier message: 22/09/2009, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo