私はRestlerを使って簡単なREST APIを実装しています。今、別のドメインのAJAXを介してそのAPIを使用する必要がある場合は、私のリクエストとともにコールバックパラメータを送信する必要があります。 Restlerにはこれがサポートされていますか(まだ実際のドキュメントはありません)クロスドメインAJAXのLuracast Restlerコールバックパラメータ
答えて
グーグルからこのページに来る人は、githubで問題を提出し、著者から優れたサポートを得ました。 Restlerがどのように構築されているかに精通していれば、実装するのはかなり簡単です。
<?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
}
}
?>
https://github.com/Luracast/Restler/issues/17から、これはrestler.phpファイルと同じディレクトリに保存する必要があります。いったんそれを持っていれば、このファイルをインクルードしてサポートされているフォーマットとして追加するようにあなたのゲートウェイ(index.php)を編集してください。例:
<?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();
?>
これが私たちのためによく働い: ヘッダー( 'アクセス制御 - 許可 - 原産地:*');
単一のエンドポイントを返す前に、コントローラメソッドにこれを追加し、そのブランチ内のすべてのエンドポイントのコントローラクラスコンストラクタに追加します。
特定のサイトだけがヘッダー( 'Access-Control-Allow-Origin:'。$ remote_domain)のような使用ヘッダー( 'Access-Control-Allow-Origin:example.com')または何かにアクセスすることを許可している場合。 $ remote_domainは、トークンなどで渡されたものに基づいて動的に設定されます。 *ワイルドカードの使用を制限する理由については、Cross-Origin Resource Sharing(CORS)を参照してください。
<?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!";
}
}
上記はGETとPOSTで動作しますが、他のアクションではrestlerのいくつかの追加ヘッダー情報が必要です。以下はいくつかの例です:
ヘッダー( 'アクセス制御許可メソッド:GET、POST、DELETE、PUT、OPTIONS'); ヘッダー( 'アクセス制御許可ヘッダー:whatever_headers_you_allow、ヘッダー1、ヘッダー2');
IE9以下の場合、JSONPハックが必要です。 Restlerには、iFormatクラスを拡張してAPI出力JASONPスタイルをラップする例があります。
CORSの詳細については、Mozillaハックをご覧ください。 http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/ そして、チェックアウトOPTIONS in PHP REST API
上記はGETとPOSTに適していますが、他のアクションではいくつかの回避策が必要です。 Mozillaのハックをチェックしてください。 http://hacks.mozilla。org/2009/07/cross-site-xmlhttprequest-with-cors / – punkael
私はいくつかの理由のためにあなたがJSONPを使用しない場合、あなたは、単に追加できることをここに追加します:
header('Access-Control-Allow-Origin: *');
をpunkaelの最初の答えあたりの(彼はしませんでしたResterでこれを行う場所を指定します)。 Restlerがヘッダデータをレスポンスに追加するsendData($ data)関数のrestler.phpにこの行を追加します。これは378行目から始まります。
しかし、これにより、ドメインからAPIのデータを取得できるようになります。
- 1. LURACAST Restlerフレームワーク - ヨーロッパの文字を扱う際の問題
- 2. Luracast Restlerはマルチパート/フォームデータフォーマットをサポートしていますか?
- 3. PHP 5でLuracast Restler 2.0を実装する方法
- 4. Luracast RestlerはマルチパートURIをサポートしていますか?
- 5. コールバックパラメータを渡すajax投稿
- 6. Luracast RestlerはJSONの代わりに 'text/html'を送信しています
- 7. クロスドメインAJAX
- 8. クロスドメインAJAX
- 9. Luracast Restler .htaccessがmod_rewriteを有効にしてリクエストを書き換えない
- 10. クロスドメインAJAXは
- 11. クロスドメインAjaxクラス
- 12. クロスドメインAJAXポストコール
- 13. Ajaxクロスドメイン変数
- 14. クロスドメインAjaxコールJquery
- 15. クロスドメインAjaxのポストリクエスト(IE)
- 16. Ajaxのクロスドメインのjqueryで
- 17. クロスドメインAJAXの明確化?
- 18. HTTP 200でのクロスドメインAJAXリクエストエラー
- 19. クロスドメインajax投稿のリクエスト
- 20. クロスドメインjQuery AJAXファイルのアップロード
- 21. IE9でのクロスドメインAJAXリクエスト
- 22. localhostのIEクロスドメインajaxリクエスト
- 23. WebMethodへのAjaxコール、クロスドメイン
- 24. GData APIとクロスドメインajaxコール
- 25. jQuery + AJAX +クロスドメイン+コンテンツを取得
- 26. クロスドメインAJAXでXMLを読む
- 27. クロスドメインajaxリクエスト基本認証
- 28. クロスドメインAJAX RESTサービスHTTPヘッダー
- 29. Restlerカスタムルート
- 30. クロスドメインIframe AJAXハッシュの歴史IE6/7
ニース。私はこれがセキュリティ上安全であるかどうか疑問に思っています:self :: $ _ ['jsonp']? –
フレームワークをハッキングしようとしているのは間違っています...これはもっと良いことです... – danielrvt
Luracastでは 'Defaults :: $ accessControlAllowHeaders'静的メンバータイプの取引を設定できないはずですか? – Miles