source: spip-zone/_plugins_/http/action/api_http.php @ 70312

Last change on this file since 70312 was 70312, checked in by rastapopoulos@…, 7 years ago

En attendant mieux, une icône qui symbolise à peu près l'échange de documents (genre get/put).
+ coquille dans les commentaires

File size: 2.1 KB
Line 
1<?php
2
3// Sécurité
4if (!defined('_ECRIRE_INC_VERSION')) return;
5
6/*
7 * Porte d'entrée des API lecture/écriture orientés REST
8 * Cette action gère donc la partie "serveur HTTP" en redirigeant les méthodes (GET, PUT, etc) vers les fonctions spécifiques
9 *
10 * http://www.site.tld/http.api/atom/patates => feed, GET=liste (critères possibles), POST=création
11 * http://www.site.tld/http.api/atom/patates/1234 => entry, GET=lecture, PUT=mise à jour
12 */
13function action_api_http_dist(){       
14        // Il faut au moins le format dans l'argument sinon rien
15        if (!$arg = _request('arg')){
16                header('Status: 404 Not Found');
17                exit;
18        }
19        else{
20                list($format, $collection, $ressource) = explode('/', $arg);
21                define('_SET_HTML_BASE', true);
22               
23                // Si le format n'a pas le bon format ou que le fichier avec l'implémentation n'existe pas, on arrête
24                if (!preg_match('/^[\w]+$/', $format)){
25                        header('Status: 404 Not Found');
26                        exit;
27                }
28               
29                $methode = $_SERVER["REQUEST_METHOD"];
30               
31                // Si on est dans une méthode où il FAUT poster quelque chose
32                if (in_array($methode, array('POST', 'PUT', 'PATCH'))){
33                        // On récupère le contenu
34                        $contenu = trim(file_get_contents("php://input"));
35                }
36               
37                // On cherche ce qu'on est en train de demander avec cette URL
38                // S'il n'y a pas de collection c'est l'index
39                if (!$collection){
40                        $type = 'index';
41                }
42                // Sinon s'il n'y a que la collection sans la ressource
43                elseif (!$ressource){
44                        $type = 'collection';
45                }
46                // Sinon c'est une ressource
47                else{
48                        $type = 'ressource';
49                }
50
51                // Le GET peut se faire sur : la racine du serveur, une collection, une ressource
52                if ($methode == 'GET'
53                        and $fonction = charger_fonction("get_$type", "http/$format/", true) // http_atom_get_index()
54                ){
55                        // On teste l'autorisation sinon 401
56                        if (
57                                autoriser("get_$type", $collection, $ressource) // autoriser_patates_get_collection_dist()
58                        ){
59                                $fonction($collection, $ressource);
60                        }
61                        else{
62                                header('Status: 401 Unauthorized');
63                                exit;
64                        }
65                }
66                // Si la fonction n'existe pas ça n'existe pas
67                else{
68                        header('Status: 404 Not Found');
69                        exit;
70                }
71        }
72}
73
74?>
Note: See TracBrowser for help on using the repository browser.