| Line 451... |
Line 451... |
| 451 |
/**
|
451 |
/**
|
| 452 |
* Execute la requête.
|
452 |
* Execute la requête.
|
| 453 |
*/
|
453 |
*/
|
| 454 |
public function executer() {
|
454 |
public function executer() {
|
| 455 |
$retour = '';
|
455 |
$retour = '';
|
| 456 |
switch ($this->methode) {
|
- |
|
| 457 |
case 'GET':
|
- |
|
| 458 |
$retour = $this->get();
|
- |
|
| 459 |
break;
|
456 |
try {
|
| 460 |
case 'POST':
|
- |
|
| 461 |
$retour = $this->post();// Retour pour l'alternative PUT
|
457 |
$methode = 'executer'.ucwords($this->methode);
|
| 462 |
break;
|
- |
|
| 463 |
case 'DELETE':
|
- |
|
| 464 |
$retour = $this->delete();
|
458 |
if (method_exists($this, $methode)) {
|
| 465 |
break;
|
- |
|
| 466 |
case 'PUT':
|
- |
|
| 467 |
$retour = $this->put();
|
459 |
$retour = $this->$methode();
|
| 468 |
break;
|
- |
|
| 469 |
// Autorise l'accès depuis des serveurs tiers
|
- |
|
| 470 |
case 'OPTIONS':
|
- |
|
| 471 |
/*header('Access-Control-Allow-Origin: *');
|
- |
|
| 472 |
header('Access-Control-Allow-Headers:origin, content-type');
|
- |
|
| 473 |
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
|
- |
|
| 474 |
header('Access-Control-Allow-Content-Type: application/json');
|
- |
|
| 475 |
header('Access-Control-Max-Age: 3628800');
|
- |
|
| 476 |
header('Access-Control-Allow-Credentials: false');*/
|
- |
|
| 477 |
break;
|
- |
|
| 478 |
default :
|
460 |
} else {
|
| 479 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_METHODE_NON_AUTORISE);
|
- |
|
| 480 |
header('Allow: GET, POST, DELETE, PUT');
|
461 |
header('Allow: GET, POST, DELETE, PUT');
|
| 481 |
$e = "La méthode HTTP '{$this->methode}' n'est pas prise en compte par ce serveur REST.\n".
|
462 |
$msg = "La méthode HTTP '{$this->methode}' n'est pas prise en compte par ce serveur REST.\n".
|
| 482 |
"Consulter l'entête Allow pour connaître les méthodes autorisées.";
|
463 |
"Consulter l'entête Allow pour connaître les méthodes autorisées.";
|
| - |
|
464 |
throw new Exception($msg, self::HTTP_CODE_METHODE_NON_AUTORISE);
|
| - |
|
465 |
}
|
| - |
|
466 |
} catch (Exception $e) {
|
| - |
|
467 |
$this->envoyerEnteteStatutHttp($e->getCode());
|
| 483 |
self::ajouterMessage($e);
|
468 |
$retour = $e->getMessage();
|
| 484 |
}
|
469 |
}
|
| 485 |
$this->cloreAccesServeur($retour);
|
470 |
$this->cloreAccesServeur($retour);
|
| 486 |
}
|
471 |
}
|
| Line 487... |
Line 472... |
| 487 |
|
472 |
|
| 488 |
/**
|
473 |
/**
|
| 489 |
* Execute a GET request. A GET request fetches a list of resource when no resource name is given, a list of element
|
474 |
* Execute a GET request. A GET request fetches a list of resource when no resource name is given, a list of element
|
| 490 |
* when a resource name is given, or a resource element when a resource and resource unique identifier are given. It does not change the
|
475 |
* when a resource name is given, or a resource element when a resource and resource unique identifier are given. It does not change the
|
| 491 |
* database contents.
|
476 |
* database contents.
|
| 492 |
*/
|
477 |
*/
|
| 493 |
private function get() {
|
478 |
private function executerGet() {
|
| 494 |
$retour = '';
|
479 |
$retour = '';
|
| 495 |
if ($this->service != null) {
|
480 |
if ($this->service != null) {
|
| 496 |
$Service = new $this->service(self::$config);
|
481 |
$Service = new $this->service(self::$config);
|
| 497 |
if (method_exists($Service, self::METHODE_GET)) {
|
482 |
if (method_exists($Service, self::METHODE_GET)) {
|
| 498 |
$methodeGet = self::METHODE_GET;
|
483 |
$methodeGet = self::METHODE_GET;
|
| 499 |
$parametres = $Service->utiliserParametresBruts() ? $this->parametresBruts : $this->parametres;
|
484 |
$parametres = $Service->utiliserParametresBruts() ? $this->parametresBruts : $this->parametres;
|
| 500 |
$retour = $Service->$methodeGet($this->ressources, $parametres);
|
485 |
$retour = $Service->$methodeGet($this->ressources, $parametres);
|
| 501 |
} else {
|
- |
|
| 502 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
486 |
} else {
|
| 503 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
|
487 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
|
| 504 |
"lors de l'appel du service via la méthode HTTP GET.";
|
488 |
"lors de l'appel du service via la méthode HTTP GET.";
|
| 505 |
self::ajouterMessage($e);
|
489 |
throw new Exception($e, self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
| 506 |
}
|
490 |
}
|
| 507 |
}
|
491 |
}
|
| 508 |
return $retour;
|
492 |
return $retour;
|
| Line 509... |
Line 493... |
| 509 |
}
|
493 |
}
|
| 510 |
|
494 |
|
| 511 |
private function post() {
|
495 |
private function executerPost() {
|
| 512 |
$retour = '';
|
496 |
$retour = '';
|
| 513 |
$paires = $this->parserDonneesRequete();
|
- |
|
| 514 |
if (count($paires) != 0) {
|
- |
|
| 515 |
if (isset($paires['action']) && $paires['action'] == 'DELETE') {// Alternative à l'utilisation de DELETE
|
- |
|
| 516 |
$retour = $this->delete();
|
- |
|
| 517 |
} else if (count($this->ressources) == 0) {// Alternative à l'utilisation de PUT
|
- |
|
| 518 |
$retour = $this->put();
|
- |
|
| 519 |
} else {
|
- |
|
| 520 |
if ($this->service != null) {
|
- |
|
| 521 |
$Service = new $this->service(self::$config);
|
- |
|
| 522 |
if (method_exists($Service, self::METHODE_POST)) {
|
- |
|
| 523 |
$methodePost = self::METHODE_POST;
|
- |
|
| 524 |
$info = $Service->$methodePost($this->ressources, $paires);
|
- |
|
| 525 |
if ($info !== false) {
|
- |
|
| 526 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
|
- |
|
| 527 |
$retour = $info;
|
- |
|
| 528 |
}
|
- |
|
| 529 |
} else {
|
- |
|
| 530 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
- |
|
| 531 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_POST."' nécessaire ".
|
- |
|
| 532 |
"lors de l'appel du service via la méthode HTTP GET.";
|
- |
|
| 533 |
self::ajouterMessage($e);
|
- |
|
| 534 |
}
|
- |
|
| 535 |
}
|
- |
|
| 536 |
}
|
- |
|
| 537 |
} else {
|
497 |
$paires = $this->parserDonneesRequete();
|
| 538 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CONTENU_REQUIS);
|
498 |
if (count($paires) == 0) {
|
| 539 |
$e = "Le service '{$this->service}' requiert de fournir le contenu à modifier dans le corps ".
|
499 |
$e = "Le service '{$this->service}' requiert de fournir le contenu à modifier dans le corps ".
|
| 540 |
"de la requête avec la méthode HTTP POST.";
|
500 |
"de la requête avec la méthode HTTP POST.";
|
| 541 |
self::ajouterMessage($e);
|
- |
|
| 542 |
}
|
- |
|
| Line 543... |
Line 501... |
| 543 |
return $retour;
|
501 |
throw new Exception($e, self::HTTP_CODE_CONTENU_REQUIS);
|
| 544 |
}
|
502 |
}
|
| - |
|
503 |
|
| 545 |
|
504 |
if (isset($paires['action']) && $paires['action'] == 'DELETE') {// Alternative à l'utilisation de DELETE
|
| 546 |
private function put() {
|
505 |
$retour = $this->delete();
|
| 547 |
$retour = '';
|
506 |
} else if (count($this->ressources) == 0) {// Alternative à l'utilisation de PUT
|
| 548 |
$paires = $this->parserDonneesRequete();
|
507 |
$retour = $this->put();
|
| 549 |
if (count($paires) != 0) {
|
508 |
} else {
|
| - |
|
509 |
if ($this->service != null) {
|
| - |
|
510 |
$Service = new $this->service(self::$config);
|
| - |
|
511 |
if (method_exists($Service, self::METHODE_POST) === false) {
|
| - |
|
512 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_POST."' nécessaire ".
|
| - |
|
513 |
"lors de l'appel du service via la méthode HTTP GET.";
|
| 550 |
if ($this->service != null) {
|
514 |
throw new Exception($e, self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
| 551 |
$Service = new $this->service(self::$config);
|
515 |
}
|
| 552 |
if (method_exists($Service, self::METHODE_PUT)) {
|
516 |
|
| - |
|
517 |
$methodePost = self::METHODE_POST;
|
| - |
|
518 |
$info = $Service->$methodePost($this->ressources, $paires);
|
| 553 |
$methodePut = self::METHODE_PUT;
|
519 |
if ($info !== false) {
|
| 554 |
$info = $Service->$methodePut($this->ressources, $paires);
|
- |
|
| 555 |
if ($info !== false) {
|
520 |
// TODO : supprimer ce test quand tous les ws utiliserons les exceptions
|
| 556 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
|
- |
|
| 557 |
$retour = $info;
|
- |
|
| 558 |
}
|
- |
|
| 559 |
} else {
|
- |
|
| 560 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
521 |
if (function_exists('http_response_code') && http_response_code() == 200) {
|
| 561 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_PUT."' nécessaire ".
|
522 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
|
| 562 |
"lors de l'appel du service via la méthode HTTP GET.";
|
523 |
}
|
| 563 |
self::ajouterMessage($e);
|
- |
|
| 564 |
}
|
- |
|
| 565 |
}
|
- |
|
| 566 |
} else {
|
- |
|
| 567 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CONTENU_REQUIS);
|
524 |
$retour = $info;
|
| 568 |
$e = "Il est nécessaire de fournir du contenu dans le corps de la requête pour créer une nouvelle ressource.";
|
525 |
}
|
| 569 |
self::ajouterMessage($e);
|
526 |
}
|
| Line 570... |
Line 527... |
| 570 |
}
|
527 |
}
|
| - |
|
528 |
return $retour;
|
| - |
|
529 |
}
|
| - |
|
530 |
|
| - |
|
531 |
private function executerPut() {
|
| - |
|
532 |
$paires = $this->parserDonneesRequete();
|
| - |
|
533 |
if (count($paires) == 0) {
|
| 571 |
return $retour;
|
534 |
$e = "Il est nécessaire de fournir du contenu dans le corps de la requête pour créer une nouvelle ressource.";
|
| 572 |
}
|
- |
|
| 573 |
|
- |
|
| 574 |
private function delete() {
|
535 |
throw new Exception($e, self::HTTP_CODE_CONTENU_REQUIS);
|
| 575 |
$retour = '';
|
536 |
}
|
| 576 |
if (count($this->ressources) != 0) {
|
537 |
|
| 577 |
$paires = $this->parserDonneesRequete();
|
- |
|
| 578 |
if ($this->service != null) {
|
- |
|
| 579 |
$Service = new $this->service(self::$config);
|
- |
|
| 580 |
if (method_exists($Service, self::METHODE_DELETE)) {
|
538 |
$retour = '';
|
| 581 |
$methodeDelete = self::METHODE_DELETE;
|
539 |
if ($this->service != null) {
|
| 582 |
$info = $Service->$methodeDelete($this->ressources, $paires);
|
540 |
$Service = new $this->service(self::$config);
|
| 583 |
if ($info === true) {
|
- |
|
| 584 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
|
- |
|
| 585 |
} else if ($info === false) {
|
541 |
if (method_exists($Service, self::METHODE_PUT) === false) {
|
| - |
|
542 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_PUT."' nécessaire ".
|
| 586 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
543 |
"lors de l'appel du service via la méthode HTTP GET.";
|
| 587 |
$e = "La ressource à supprimer est introuvable. Il se peut qu'elle ait été préalablement supprimé.";
|
544 |
throw new Exception($e, self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
| 588 |
self::ajouterMessage($e);
|
- |
|
| 589 |
} else {
|
545 |
}
|
| 590 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_OK);
|
546 |
|
| 591 |
$retour = $info;
|
547 |
$methodePut = self::METHODE_PUT;
|
| 592 |
}
|
548 |
$info = $Service->$methodePut($this->ressources, $paires);
|
| 593 |
} else {
|
- |
|
| 594 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
549 |
if ($info !== false) {
|
| - |
|
550 |
// TODO : supprimer ce test quand tous les ws utiliserons les exceptions
|
| 595 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_DELETE."' nécessaire ".
|
551 |
if (function_exists('http_response_code') && http_response_code() == 200) {
|
| 596 |
"lors de l'appel du service via la méthode HTTP GET.";
|
552 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
|
| - |
|
553 |
}
|
| - |
|
554 |
$retour = $info;
|
| - |
|
555 |
}
|
| - |
|
556 |
}
|
| 597 |
self::ajouterMessage($e);
|
557 |
return $retour;
|
| 598 |
}
|
558 |
}
|
| - |
|
559 |
|
| - |
|
560 |
private function executerDelete() {
|
| - |
|
561 |
if (count($this->ressources) == 0) {
|
| - |
|
562 |
$e = "Il est nécessaire d'indiquer dans l'url la ressource à supprimer.";
|
| - |
|
563 |
throw new Exception($e, self::HTTP_CODE_MAUVAISE_REQUETE);
|
| - |
|
564 |
}
|
| - |
|
565 |
|
| - |
|
566 |
$paires = $this->parserDonneesRequete();
|
| - |
|
567 |
$retour = '';
|
| - |
|
568 |
if ($this->service != null) {
|
| - |
|
569 |
$Service = new $this->service(self::$config);
|
| - |
|
570 |
if (method_exists($Service, self::METHODE_DELETE) === false) {
|
| - |
|
571 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_DELETE."' nécessaire ".
|
| - |
|
572 |
"lors de l'appel du service via la méthode HTTP GET.";
|
| - |
|
573 |
throw new Exception($e, self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
| - |
|
574 |
}
|
| - |
|
575 |
|
| 599 |
}
|
576 |
$methodeDelete = self::METHODE_DELETE;
|
| - |
|
577 |
$info = $Service->$methodeDelete($this->ressources, $paires);
|
| - |
|
578 |
if ($info === true) {
|
| - |
|
579 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
|
| - |
|
580 |
} else if ($info === false) {
|
| - |
|
581 |
$e = "La ressource à supprimer est introuvable. Il se peut qu'elle ait été préalablement supprimé.";
|
| 600 |
} else {
|
582 |
throw new Exception($e, self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
| 601 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_MAUVAISE_REQUETE);
|
583 |
} else {
|
| 602 |
$e = "Il est nécessaire d'indiquer dans l'url la ressource à supprimer.";
|
584 |
$retour = $info;
|
| Line -... |
Line 585... |
| - |
|
585 |
}
|
| - |
|
586 |
}
|
| - |
|
587 |
return $retour;
|
| - |
|
588 |
}
|
| - |
|
589 |
|
| - |
|
590 |
/*private function executerOptions() {
|
| - |
|
591 |
header('Access-Control-Allow-Origin: *');
|
| - |
|
592 |
header('Access-Control-Allow-Headers:origin, content-type');
|
| - |
|
593 |
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
|
| 603 |
self::ajouterMessage($e);
|
594 |
header('Access-Control-Allow-Content-Type: application/json');
|
| 604 |
}
|
595 |
header('Access-Control-Max-Age: 3628800');
|
| 605 |
return $retour;
|
596 |
header('Access-Control-Allow-Credentials: false');
|
| 606 |
}
|
597 |
}*/
|
| 607 |
|
598 |
|