2016-03-30 3 views
1

最近、PHPを使用してデータを処理できるAPIを作成するように求められました。私はPHPに慣れていないので、どのように進めるべきかについてはあまりよく分かりません。扱うことになっているため、フォーム投稿を処理するAPIの作成

<form METHOD="POST" ACTION="https://MyURL/index.php" id=aForm name=aForm> 
    <input type="hidden" id="Lite_Merchant_ApplicationID" name="Lite_Merchant_ApplicationID" value="Your Application Id"> 
    (various other fields to be processed) 
</form> 

が、私はこのAPIを呼び出すことで間違っているかもしれない:私が達成したいものを基本的に

は、ユーザーは次のように呼び出すことができるフォームポストを処理APIを作成することですフォームポスト。しかし私は、ユーザが私たちのシステムと統合してフォームを私たちのURLに投稿して、そのフォームの情報を処理できるようにするためのドキュメンテーションをコンパイルする必要があります。

私は見て良いチュートリアルはありますか?フォームを使用してAPIを呼び出すことについて何も言及していないので、私が見ているものが該当するかどうかはわかりません。例えば https://docs.phalconphp.com/en/latest/reference/tutorial-rest.htmlhttp://coreymaynard.com/blog/creating-a-restful-api-with-php/

または私はちょうどPHPで通常通りのフォームを処理し、使用して値をaccesssん。その場合は

$_POST["name"]; 

をユーザが言語を使用してAPIを呼び出すことができるようになります彼らの選択の?

"https"になるため、私が見たり、検討しなければならないことがあれば、私はもう1つ質問します。

これがあまり具体的でない場合は、事前にお詫び申し上げます。アドバイス/ポインタをいただければ幸いです。

追加情報: システムがリダイレクトを実行し、ログイン資格情報をできるようにする必要がありますが

+1

phpに慣れていない場合は、PhalconをAPIを作成するのが好きではなく、単純なAPIをコアPHPで作成してみてください。この投稿があなたに役立つことを願っています... [リンク] http://stackoverflow.com/questions/4973156/how-to-write-a-rest-api [リンク] –

+1

*自分が選んだ言語を使ってAPIを呼び出すことができますか?」これはAPIの背後にあるアイデアの1つです。デカップリング。 *「https」になるため、私が見たり、検討しなければならないことがあれば、私はもう1つ質問します。 [* "。HTTPSは、トランスポート層セキュリティで暗号化された接続内のHTTP(Hypertext Transfer Protocol)による通信で構成されています" *](https://en.wikipedia.org/wiki/OSI_model) HTTPSは道のりです。 – jDo

+0

URLを投稿した隠れたパラメータを追加して、データを投稿する最終メソッドを追加することができます。 – KDOT

答えて

4

あなたの質問は少し広い範囲である、とあなたがそのように単語を使用することができる隠されたフォーム入力中に送信されます私の理解は一貫していません。

通常、APIは1つ以上のメソッドですが、フォームPOSTイベントの処理はフォームハンドラです。 (APIを使いやすくするにはどうすればいいですか)、ドキュメント、セキュリティ(どのようにして、どのようにしてAPIを簡単に使用できるようにするか)を考慮する必要があります。許可されたユーザー/アプリケーションのみがAPIを使用することを保証しますか?) APIはしばしば複数のユーザーを持ち、多くの場合、クライアントアプリケーションのスケーラビリティ要件をサポートする必要があります。
RESTはAPIを設計する優れた方法です。クライアントにとっては理解しやすく、多くの賢い人が認証/承認、バージョン管理、抽象化などの問題を解決しました。
RESTは既存のHTTPコンセプトを使用するため、RESTful APIはPOST要求を公開して新しいエンティティを作成することに注意してください。このPOSTリクエストは、<form>要素を持つWebページ、またはRESTクライアントから呼び出すことができます。 RESTful APIを記述すると、クライアントはHTTPをサポートする任意の言語で記述できます。
RESTful Web APIをPHPで簡単に構築できるフレームワークがたくさんあります。私は何も使用していないので、推薦をすることはできません。

しかし、変更しないウェブページからPOSTリクエストを処理するだけで済む場合は、RESTful APIを構築しないで、PHPの "POST"ハンドラ。この場合、クライアントはあなたのPOSTパラメータ(実際には、HTTP要求を行うことができるアプリケーション)を理解することができます。

私の見解では、 "POST Handler"と "API"の違いは、APIを作成するときに、クライアントが依存していることを確約することです。 "私はあなたに話すことなくフィールド名を変更しません"。 "私はあなたのことを知らずに場所を変更しません"。 "あなたは私の文書が言うことに依存することができます"。 POSTハンドラを作成するときは、HTMLフォームの製造元にのみ動作することを約束し、チームに変更を伝えるようにします。

HTTPSの唯一の課題は、呼び出し側のアプリケーションがそれを処理し、キーが機能することを確認する必要があることです。

+0

ありがとう@Nevilleは、HTTPリクエストをサポートしている限り、私の選択した言語を使って両方のメソッドを呼び出すことができますか? – Dave

+0

はい - 違いは本当に誰がそれを呼び出す必要があるかであり、その1つのPOSTリクエスト以上に何かをする必要があるかどうかです。 –

+0

プロジェクトの目的は、複数の支払い方法を組み込んだシステムを作成することです。だから基本的にはフォームのデータを集めて検証し、それをPaypalまたは選択した支払い方法に渡してから、フォームのポストで送信された成功/失敗URLにリダイレクトするだけです。 – Dave

0

ちょうどPHPで通常通りのフォームを処理し、使用して値をaccesss:

$_POST["name"]; 

をAPIのユーザーはちょうどHTMLフォーム、AJAX、または何でもにより、POSTリクエストを送信する必要があります。 レスポンスフォーマットhtml、xml、jsonのフィールドを追加し、レスポンスのフォーマットに使用する必要があります。

0

は、私の会社は、RESTfulなAPI呼び出しを処理する方法の一例です。

まず、switch文で呼び出しを処理するphpファイルがあります。異なるアクションを前記のファンクションおよびクラスにルーティングする。

/* Class file that is called on this page */ 
include_once "$_SERVER[DOCUMENT_ROOT]/classes/class.myclass.php"; 

/** 
* This function makes it simpler to stop it from working for debugging purposes. 
* All we have to do is comment out the one line of code apiCall($_REQUEST); 
* You could have this outside of the function and it would work just as well. 
* @param type $REQUEST 
*/ 
function apiCall($REQUEST) { 
    $con = new MyClass(); 
    switch ($REQUEST['action']) { 
     case 'getList': 
      /* Setting the content type to json means that the developer can 
      * expect a response in the form of parseable json. 
      */ 
      header('Content-Type: application/json'); 
      echo json_encode($con->getList($REQUEST)); 
     case 'setValue': 
      header('Content-Type: application/json'); 
      echo json_encode($con->setValue($REQUEST)); 
     case 'login': 
      if ($con->login($REQUEST)) { 
       header('Location: /index.php'); 
      } else { 
       header('Content-Type: /login.php?status=Failed+Login'); 
      } 
     default: 
      header('Content-Type: application/json'); 
      /* If an invalid action was sent in, then this error message will be sent 
      * back to the user 
      */ 
      echo json_encode(['status' => 'Invalid API Call']); 
    } 
} 

/* Using $_REQUEST allows developers to access the api via GET or POST */ 
apiCall($_REQUEST); 

次に、私たちが呼び出したさまざまなクラスのすべてのロジックを処理します。使用JSON

class MyClass { 

    public function getList($REQUEST) { 
     $id = $REQUEST['id']; 
     /* code */ 
     return ['status' => 'ok', 'results' => $array]; 
    } 

    public function setList($REQUEST) { 
     /* code */ 
     return ['status' => 'ok']; 
    } 

    public function login($REQUEST) { 
     /* code */ 
     $_SESSION['user_id'] = $user_id; 
     return $login_successful; 
    } 

} 

AJAXの呼び出しを介して情報を送信するアプリケーションに適しています。 header('Location:')を使用すると、ajaxのないフォーム提出に適しています。

JavaScriptのajax呼び出しを使用したり、データの送信をどのように処理するかに基づいて送信できます。

jQuery.getJSON

$.getJSON('/switch.php', $.param({id: id, action: 'getList'}), function (json) { 
    if (json) { 
     /*code*/ 
    } 
}); 

の使用例次に、あなたは、通常のフォームの送信のためのスイッチのページにしてアクションを持つ隠し入力を渡します。

<form action="/switch.php" method="post"> 
    <!--hidden input named action to direct which switch to use--> 
    <input name="action" value="login" type="hidden"/> 
    <input name="username"/> 
    <input name="password" type="password"/> 
    <input type="submit"/> 
</form> 

これらの例は、html/JavaScriptウェブアプリケーション向けです。あなたがJAVA、Python、。NETなどの言語を使用している場合は、REST APIを使用してJSONを解析してアプリケーションロジックの処理方法を把握するだけで簡単です。

file_get_contentsまたはcurlを使用してphpからphiへの呼び出しを実行することもできます。

$data = [ 
    'action' => 'setValue', 
    'information' => 'More' 
]; 
$json = json_decode(file_get_contents('/switch.php?' . http_build_query($data)),true); 
if(!empty($json)){ 
    /*code*/ 
} 

あなたは、コールごとに別々のページを作成し、すべての要求にactionに渡す心配する必要はありませんでした。しかし、あなたのファイルツリーはこのように見えるようになります。

/api/loginSubmit.php 
/api/login.php 
/api/getListFromId.php 
/api/getList.php 
/api/setValues.php 
/api/getValues.php 

それは、問題がどこにあるかを把握するために、すべてのこれらのファイルを横断するために本当に退屈取得します。

関連する問題