Restful est-il destiné uniquement aux services Web OU aux services Web ET aux pages Web ?

StackOverflow https://stackoverflow.com/questions/2391792

  •  25-09-2019
  •  | 
  •  

Question

J'ai lu beaucoup de tutoriels Restful pour PHP.

(Je ne veux pas expliquer en détail pourquoi je n'utilise pas RoR.Cela est dû au fait que l'équipe est plus familiarisée avec PHP)

Parce que nous prévoyons une expansion future vers des API, j'ai lu qu'il est important de mettre en œuvre des services Web Restful.

J'ai regardé des tutoriels tels que

http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

Apparemment, restful est destiné aux services Web.

Et pour les pages Web ?peuvent-ils être REPOSANTS aussi ?

si la réponse est NON, veuillez ne pas dépasser cette ligne ET dites-le-moi simplement.Merci.

je sais que pour que les URL ressemblent à des URL RESTFUL, il suffit d'utiliser mod_rewrite.Cependant, j'en suis sûr, l'architecture reposante va au-delà de la simple apparence des URL.

Par exemple, j'ai une liste d'éléments sur une page Web appelée list.php .Chaque élément est accompagné d'un lien de suppression.Par exemple, list.php?id=1&deleteitem

Ce qui se passe, c'est que lorsque quelqu'un clique sur le lien list.php?id=1&deleteitem, bien sûr, je reviens au même fichier list.php et vérifie le paramètre deleteitem dans $_GET.

S'il est détecté, je supprimerai ensuite de la base de données en fonction de l'identifiant du paramètre dans $_GET.

Après quoi, je reviendrai vers list.php SANS aucun paramètre.

Je me demande, comment puis-je rendre tout ce flux REPOSANT ?

Je demande parce que dans REST, pour supprimer quelque chose, vous devez utiliser la méthode de requête HTTP (DELETE).

Clairement, dans mes liens, ils sont tous simplement <a href="list.php?id=1&deleteitem">Delete</a>

Merci de m'éclairer.

Ma programmation n'est pas si forte et ce serait bien si les conseils donnés pouvaient être aussi profanes que possible.

Merci.

MODIFIER

J'ai 2 questions complémentaires.

question 1) Puisqu'il s'agit d'une liste d'éléments avec pagination, à quoi ressemblerait l'URL si je veux la rendre RESTful ?

question 2) Puisque je mets des liens DELETE à côté de chacun des éléments de la liste, je comprends maintenant, je devrais utiliser

<form method="POST">
<input type=hidden name="_method" value="delete">
<input type="submit" >
</form>

plutôt.

cependant, le formulaire doit être affiché où ?l'url de l'article ?/items/{item-id}

Mais je souhaite revenir à cette page de liste affichant un message de réussite APRÈS avoir supprimé avec succès la ligne dans la base de données.

Je souhaite également éviter un message contextuel lorsque j'actualise cette page de liste avec un message de réussite.

Si je publie sur cette URL list.php, alors ce n'est pas RESTful, oui ?parce que les réponses ci-dessous me disent que chaque élément est une ressource qui a besoin de sa propre URL.

Merci de m'éclairer.Merci.

Était-ce utile?

La solution

RESTful est couramment utilisé en référence à des services Web, mais il peut très bien appliquer aux pages Web. En un mot, être RESTful est sur le traitement des ressources. Une ressource peut être une personne, un livre, un film, un théâtre, un billet, ou tout ce que vous aimez.

Il y a quatre opérations de base que vous pouvez effectuer sur une ressource.

  • créer (POST)
  • lecture (GET)
  • Mise à jour (PUT)
  • supprimer (DELETE)

La plupart des navigateurs Web ne prennent pas en charge les actions de PUT et DELETE, de sorte que vous ne pouvez utiliser des actions POST pour l'envoi de données. Rails fakes PUT et DELETE en passant dans un paramètre caché nommé _method que le cadre reprend et achemine en fonction de cette valeur.

En outre, vous ne devez jamais utiliser GET pour toute action destructrice. Toute action qui change l'état de votre ressource (s), doit être appelé avec l'POST, PUT ou DELETE en fonction du changement (faux PUT / POST SUPPRIMER avec le cas échéant).

Je vous suggère de extrayez de la façon dont le routage RESTful est gérée dans Rails juste pour avoir une idée, si rien d'autre. Althought les quatre actions ci-dessus sont suffisantes pour modifier une ressource de quelque manière que possible, Rails introduit également trois autres types d'actions qui retentissent utiles.

  • index (voir la liste de tous les articles)
  • nouvelle (généralement une vue de formulaire pour ajouter une nouvelle ressource)
  • modifier (généralement une vue sous forme de mettre à jour une ressource existante)

est URL Jolie sans aucun doute sur la table lors de la conception des sites RESTful, mais sans doute la plus grande victoire est que la qualité du code améliore automatiquement. Lorsque vous ne traitez avec des ressources, et il n'y a que quatre actions potentielles qui peuvent être appliquées à une ressource, puis les choses commencent à nettoyer par eux-mêmes.

Modifier 1 : Autodescriptive URL sont préférés et vous rendra la vie plus facile, mais il n'y a rien qui empêche de créer des URL cryptiques qui identifient de manière unique une ressource et la gérer en utilisant les verbes HTTP. URL telles que celles ci-dessous (en utilisant md5) pour identifier les ressources sont parfaitement RESTful.

// represents a person "John Doe"
http://example.com/4c2a904bafba06591225113ad17b5cec

// represents the movie "Lord of the Rings: The Two Towers"
http://example.com/1d9198260dec7bda3fb21e232d60fec3

// represents the "Formula One" sport
http://example.com/fs340as?id=23xa12&type=SP012Ts

C'est Representational State Transfer là. Le hachage MD5 est comme l'adresse postale de la ressource qui reste constante. La représentation pourrait être les détails du film (en html / xml / JSON / etc.), Ou peut-être la vidéo du film lui-même en fonction des capacités du client).

Edit 2 : Disons que vous avez une ressource qui est une collection - countries du monde. Il pourrait être représenté par un verbe URI et HTTP tels que:

GET /countries

Depuis la pagination est une propriété de l'application plutôt que la ressource elle-même, vous pouvez fournir des paramètres querystring pour le contrôler.

GET /countries?page=1

Un pays est également une ressource qui est une partie de la ressource des pays. Vous pouvez identifier un pays avec une URL telle que:

/countries/<id>

Et les opérations sur ce pays pourraient être réalisées avec ces verbes:

GET    /countries/<id>
POST   /countries  -- the new country has no existing representation
PUT    /countries/<id>
DELETE /countries/<id>

Autres conseils

Réponse longue et courte :Oui.REST est pour les deux.En effet, même si vous disposez du site Web le plus simple de tous, il vous faudra quand même OBTENIR votre page et peut-être POSTER vos données personnelles pour ajouter une entrée au livre d'or.En cela, nous adhérons tous d’une manière ou d’une autre à REST.

Dans votre cas, une mauvaise implémentation du navigateur rend difficile la mise en œuvre d'une méthode PURE RESTful.DELETE n'est pas pris en charge sans Javascript et vous devrez donc de toute façon utiliser GET ou POST (qui ont tous deux une signification totalement différente de DELETE dans REST).

approche Restful peut certainement être utilisé dans les pages Web ainsi. Mettre les commandes dans une URL est pas une bonne idée, en raison des effets secondaires que vous mentionnez. Lorsque vous modifiez la base de données (ou faire tout ce qui change le modèle), utilisez les commandes POST.

Bien sûr, vous n'avez pas PUT et delte dans les principaux navigateurs web, mais vous pouvez toujours envoyer simple POST avec un paramètre spécifique comme method = « PUT », method = « SUPPR » etc.

J'ai écrit un cadre minuscule au-dessus de Zend Framework pour rendre l'implémentation des interfaces RESTful plus facile:

http://github.com/mikekelly/Resauce

Vous pouvez l'utiliser pour les services Web et des sites Web. Pour l'essentiel, un site Web est juste un service Web piloté par HTML.

RESTful ne signifie pas "beau URIs". Malgré le fait que URIs identifier une ressource la seule chose REST dit à propos URIs est, qu'ils ne doivent pas contenir un paramater d'action comme « supprimer ».

Dans votre cas, vous appelez

DELETE /items/6793

La réponse est généralement le code d'état 200 OK avec la liste modifiée comme corps du message. Voir: http://restpatterns.org/HTTP_Methods/DELETE

Depuis HTML 4 ne supporte pas d'autres actions de formulaire que GET et POST vous devez contourner avec un paramater caché et remplacer la méthode HTTP sur le côté serveur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top