2011-11-09 28 views
1

最近、私はRestアーキテクチャと苦労しています:pと私はいつもそれに多くの問題を引き起こします。 「user」という名前のリソースがあり、そのユーザーに車のリストがあるとします。 そのユーザーと彼の車のリストをデータベースに一度に挿入しようとしています。私はPOST HTTP動詞でこれを行う必要があることを知っています。しかし、どうすればこれを達成できますか?ユーザーIDと何らかの形でコード化された車のリストを含むURLを1つだけ送信する必要がありますか?ユーザーを挿入するために「ユーザー」リソースを使用する必要があります。次に、それぞれの自動車について、「car」というリソースでPOST URLを呼び出します。RestFul Webサービスとデータベーストランザクション

2番目の方法には問題があります。このプロセスは、データベーストランザクションで実装する必要があります。車を挿入するときに何かがうまくいかない場合、私はユーザーがデータベースに登録されないようにしたい。

私はrestFulアーキテクチャがステートレスでなければならないことを知っています。そのため、データベース機能を使用してこのようなトランザクションを実装するにはどうすればよいですか?私は何らかのトランザクションを実装することができますが、より自動化したいと思っています。

ありがとうございます。

答えて

0

フロントエンドとバックエンドで使用している言語や、このデータの送信方法によっては、さまざまな方法があります。私はPHPとあなたに配列を送信します。このようVAR cars[]を使用しています(

  1. は、データが準備をしなさい、そうuser=123&cars[]=1&cars[]=2&cars[]=3のようなもの:私はあなたがPHPとMySQLを使っていると仮定すると、そのような問題を解決するだろう入力フィールドにcars[]という名前を付けてこれを実現できます)
  2. これをバックエンドに投稿
  3. バックエンドはユーザーを処理し、存在しない場合はデータベースに追加します。
  4. 私は、その後の線に沿って何か、利用者と車の間の関係を示すテーブルを持っているでしょう:

    が表box_to_category( USER_ID int型(11)、NOT NULL、 car_id int型(11)を作成しますNOT NULL );私は、そのユーザーに関連付けられているすべての車をオフにして、バックエンド(user_idusers表にuserに関連付けされ、car_idがに関連付けられるに掲載され、新しい車を追加したい。この表で

  5. carsテーブルでcar

それは簡単なセットアップです。

+0

この方法は私がそれを行う方法を知っています:p。もちろん有効な答えです。私はURLで各車を送信する別のアプローチを知りたかったので、何らかのデータベーストランザクションシステムを実装する必要がありました。 しかし、あなたがこのアプローチを示したので、私にあなたに何かを聞かせてください。このアプローチでは、ユーザーは何らかのアラビアシェイクだったと想像してみましょう。彼は多くの車を持っています。これが当てはまる場合、正しく送信されるには大きすぎるURLを作成する可能性があります。これはPOSTメソッドなので、サーバーのPOST MAX SIZEを大きくする方法がありますか?そしてそれがGET要求だったら? –

+0

この方法では、エンコードされたオブジェクトを送信することはできませんか?私は車を送って、自分のIDと名前を送ろうとしていたと言いましょう。どうしますか? carId [] = 1&carId [] = 2&carName []&carName []のような配列で、2つの配列をインデックスで一致させますか?または、何らかの形でオブジェクトを送信する方法はありますか? –

+0

はい、最大の投稿サイズを増やす必要があります.GETで投稿することはお勧めできません。しかし、PHPの最大ポストサイズはデフォルトで8MBで、テキストの*ロット*です。エンコードされたオブジェクトとしてそれを行うためには、うまくも、あなたのために何がうまくいく。 IMO私は、1つのコールでそれを行うほうが、1000人分の車を節約するのではなく、1人分と1000人分のコールをユーザと各自の車のために呼び出す方がよいと言いたい。 –

関連する問題