/ / Parameter spätného volania Luracast Restler pre AJAX naprieč doménami - php, rest

Parameter spätného volania služby Restorer pre domény AJAX - php, rest

Používam Restler implementovať jednoduché REST API. Ak teraz potrebujem konzumovať toto rozhranie API prostredníctvom AJAX z inej domény, musím spolu so svojimi žiadosťami poslať parameter spätného volania. Existuje podpora v službe Restler (musím nájsť skutočnú dokumentáciu)?

odpovede:

5 pre odpoveď č. 1

Pre každého, kto na túto stránku príde z googlingu, somodoslal problém na github a od autora dostal vynikajúcu podporu. Ukázalo sa, že implementácia je pomerne triviálna, ak ste oboznámení s tým, ako je postavený Restler.

z https://github.com/Luracast/Restler/issues/17

<?php
//jsonpformat.php
class JsonpFormat implements iFormat {

const MIME = "text/javascript";
const EXTENSION = "js";
/*
* JsonFormat is used internally
* @var JsonFormat;
*/
public $jsonFormat;
public static $functionName = "parseResponse";

public function __construct() {
$this->jsonFormat = new JsonFormat ();
if (isset ( $_GET ["jsonp"] )) {
self::$functionName = $_GET ["jsonp"];
}
}
public function getMIMEMap() {
return array (self::EXTENSION => self::MIME );
}
public function getMIME() {
return self::MIME;
}
public function getExtension() {
return self::EXTENSION;
}
public function encode($data, $human_readable = FALSE) {
return self::$functionName . "(" . $this->jsonFormat->encode ( $data, $human_readable ) . ");";
}
public function decode($data) {
return $this->jsonFormat->decode ( $data );
}
public function setMIME($mime) {
//do nothing
}
public function setExtension($extension) {
//do nothing
}
}
?>

Toto by malo byť uložené v rovnakom adresári ako súbor restler.php. Keď to budete mať, upravte svoju bránu (index.php) tak, aby obsahovala tento súbor, a pridajte ho ako podporovaný formát. Príklad:

<?php
require_once "../../restler/restler.php";

#set autoloader
#do not use spl_autoload_register with out parameter
#it will disable the autoloading of formats
spl_autoload_register("spl_autoload");

$r = new Restler();
$r->setSupportedFormats("JsonpFormat","JsonFormat", "XmlFormat");
$r->addAPIClass("BMI");
$r->handle();
?>

1 pre odpoveď č. 2

Fungovalo to pre nás dobre: hlavička („Access-Control-Allow-Origin: *“);

Pridajte to k metóde kontroléra pred návratom pre jeden koncový bod, k konštruktoru triedy kontrolóra pre všetky koncové body v tejto vetve alebo vyššie, aby ste umožnili jej umiestnenie na celom webe.

Ak povolíte prístup iba určitým webovým stránkampoužite hlavičku („Access-Control-Allow-Origin: example.com“) alebo niečo podobné hlavičke („Access-Control-Allow-Origin:“. $ remote_domain). Kde je $ remote_domain nastavená dynamicky na základe niektorých odovzdaných v tokene alebo podobne. Pozrite sa na zdieľanie zdrojov krížového pôvodu (CORS), aby ste obmedzili používanie zástupných znakov *.

<?php

class Say {

__construct(){
header("Access-Control-Allow-Origin: *"); //Here for all /say
}

function hello($to="world") {
header("Access-Control-Allow-Origin: *"); //Here for just /say/hello
return "Hello $to!";
}
}

Vyššie uvedené práce pre GET a POST, iné akcie vyžadujú niektoré ďalšie informácie o hlavičke od restlera. Tu je niekoľko príkladov:

hlavička („metódy umožňujúce riadenie prístupu: GET, POST, DELETE, PUT, OPTIONS“); header ("Head-Control-Allow-Headers: what_headers_you_allow, header1, header2");

Pre IE9 a novšie budete musieť zaseknúť JSONP. Restler má príklad rozšírenia triedy iFormat tak, aby obalil štýl výstupu JASONP API.

Podrobnosti o hackeroch Mozilla nájdete na stránkach CORS. http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/ A pozrite sa MOŽNOSTI v rozhraní API REST PHP


0 pre odpoveď č. 3

Tu pridám, že ak z nejakého dôvodu nechcete používať JSONP, môžete jednoducho pridať:

header("Access-Control-Allow-Origin: *");

za prvú odpoveď na punkael (neurčil ju)kde to urobiť v Resteri). Pridajte tento riadok do restler.php vo funkcii sendData ($ data), kde Restler pridá do odpovede dáta hlavičky. Začína to na riadku 378.

Dajte pozor, pretože to umožní akejkoľvek doméne získavať údaje z vášho rozhrania API.