1: <?php
2: /**
3: * Classe principale gérant les services.
4: * Paramètres liés dans config.ini :
5: * - serveur.baseURL
6: *
7: * Encodage en entrée : utf8
8: * Encodage en sortie : utf8
9: *
10: * @category Php 5.2
11: * @package Framework
12: * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
13: * @copyright Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
14: * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
15: * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
16: * @since 0.3
17: * @version $Id: RestService.php 417 2012-05-15 09:24:12Z jpm $
18: * @link /doc/framework/
19: */
20: abstract class RestService {
21:
22: /** Objet de connection à la base de données.
23: * @deprecated Utiliser la methode getBdd().
24: * @see getBdd()
25: */
26: protected $bdd = null;
27:
28: /** Objet Rest Client. */
29: private $RestClient = null;
30:
31: /** Indique si oui (true) ou non (false), on veut utiliser les paramètres brutes. */
32: protected $utilisationParametresBruts = false;
33:
34: public function __construct($config) {
35: $this->config = $config;
36: $this->bdd = new Bdd();
37: }
38:
39: public function initialiser() {
40:
41: }
42:
43: /**
44: * Méthode de connection à la base de données sur demande.
45: * Tous les services web n'ont pas besoin de s'y connecter.
46: */
47: protected function getBdd() {
48: if (! isset($this->bdd)) {
49: $this->bdd = new Bdd();
50: }
51: return $this->bdd;
52: }
53:
54: /**
55: * Méthode permettant de faire appel à un client REST en fonction des besoins du service.
56: */
57: protected function getRestClient() {
58: if (! isset($this->RestClient)) {
59: $this->RestClient = new RestClient();
60: }
61: return $this->RestClient;
62: }
63:
64: /**
65: * Méthode permettant de savoir si le service veut utiliser des paramètres bruts (issu de la QueryString)
66: * ou pas (issu de $_GET).
67: */
68: public function utiliserParametresBruts() {
69: return $this->utilisationParametresBruts;
70: }
71:
72: /**
73: * Permet d'ajouter un message d'erreur ou d'avertissement qui sera envoyé au client.
74: * Le message doit être au format texte et en UTF-8.
75: * @param string $message le message à envoyer.
76: */
77: protected function ajouterMessage($message) {
78: RestServeur::ajouterMessage($message);
79: }
80:
81: /**
82: * Méthode appelée lors d'une requête HTTP de type GET.
83: *
84: * Si la consultation est un succès, le code statut HTTP retourné sera 200. Dans tous les autres cas,
85: * la méthode devra retourner le code statut HTTP adéquate.
86: *
87: * @param array Morceaux de l'url servant à préciser la ressource concerné pour le service demandé.
88: * @param array Partie de l'url situé après le '?' servant à paramétrer le service demandé.
89: * @return string une chaine indiquant le succès de l'opération et les données demandées.
90: */
91: public function consulter($ressources, $parametres) {
92: RestServeur::envoyerEnteteStatutHttp(RestServeur::HTTP_CODE_METHODE_NON_AUTORISE);
93: RestServeur::ajouterMessage("Le service '".get_class($this)."' n'autorise pas la consultation.");
94: }
95:
96: /**
97: * Méthode appelée lors d'une requête HTTP de type POST.
98: *
99: * La ressource à modifier est indiquée via l'url. Les données devant servir à la mise à jours sont passées dans le corps
100: * de la requête.
101: * Si la modification est un succès, la méthode devra retourner "true" et le code statut HTTP retourné sera 201.
102: *
103: * @param array Morceaux de l'url servant à préciser la ressource concerné pour le service demandé.
104: * @param array les données transférées dans le corps de la requête devant servir à la modification.
105: * @return mixed une chaine indiquant le succès de l'opération ou rien.
106: */
107: public function modifier($ressources, $requeteDonnees) {
108: RestServeur::envoyerEnteteStatutHttp(RestServeur::HTTP_CODE_METHODE_NON_AUTORISE);
109: RestServeur::ajouterMessage("Le service '".get_class($this)."' n'autorise pas la modification.");
110: return false;
111: }
112:
113: /**
114: * Méthode appelée lors d'une requête HTTP de type PUT.
115: *
116: * L'identifiant de la ressource à ajouter est indiqué via l'url si on le connait par avance. Sinon, il doit être créé par
117: * le service. Dans ce dernier cas, le nouvel identifiant devrait être renvoyé dans le corps de la réponse.
118: * Si l'ajout est un succès, la méthode devra retourner "true" ou l'identifiant.
119: * Le code statut HTTP retourné sera 201 en cas de succès.
120: * Dans le cas contraire, la méthode devra retourner false.
121: *
122: * @param array Morceaux de l'url servant à préciser la ressource concerné pour le service demandé.
123: * @param array les données transférées dans le corps de la requête devant servir à l'ajout.
124: * @return string l'identifiant créé.
125: */
126: public function ajouter($ressources, $requeteDonnees) {
127: RestServeur::envoyerEnteteStatutHttp(RestServeur::HTTP_CODE_METHODE_NON_AUTORISE);
128: RestServeur::ajouterMessage("Le service '".get_class($this)."' n'autorise pas la création.");
129: return false;
130: }
131:
132: /**
133: * Méthode appelée lors d'une requête HTTP de type DELETE (ou POST avec action=DELETE dans le corps de la requete).
134: *
135: * Si la suppression est un succès, la méthode devra retourner "true" et le code statut HTTP retourné par
136: * RestServeur sera 204.
137: * Si la ressource à supprimer est introuvable, la méthode devra retourner "false" et le code statut HTTP
138: * retourné par RestServeur sera 404.
139: * Dans les autres cas de figure ou si vous souhaitez gérer vos propres codes de retour erreur, retourner
140: * la valeur null ou rien.
141: *
142: * @param array Morceaux de l'url servant à préciser la ressource concerné pour le service demandé.
143: * @return mixed une chaine indiquant le succès de l'opération ou rien.
144: */
145: public function supprimer($ressources) {
146: RestServeur::envoyerEnteteStatutHttp(RestServeur::HTTP_CODE_METHODE_NON_AUTORISE);
147: RestServeur::ajouterMessage("Le service '".get_class($this)."' n'autorise pas la suppression.");
148: return null;
149: }
150: }
151: ?>