2017-04-10 18 views
1

このAPIチュートリアル/解説参照:PUTの代わりにDELETE/POSTを使用する理由は、ユーザーの「フォローアップ/フォロー」ですか?

POST /api/profiles/:username/followを: https://thinkster.io/tutorials/design-a-robust-json-api/getting-and-setting-user-data

をチュートリアルでは、 'ユーザーに従う' に、あなたが使用することを説明しています。

'ユーザーをフォローし' するためには、あなたが使用します。

DELETE /api/profiles/:username/follow

ユーザプロファイルは、最初にフィールド"following": falseを所有しています。

trueからfalseに更新される代わりに、「次の」フィールドが作成/削除される理由(POST/DELETE)がわかりません。私は実際に何が起こっているのか把握していないかのように感じます。truefalseの間の「フォロー」の値を単純に切り替えるだけではありませんか?

ありがとうございます!

答えて

0

私は、データベースレイヤーは、単に「フォロー」のブール型列を持つよりもやや複雑な方法で実装する必要があると思います。

3人のユーザーがいるとすれば、ユーザーのうち1人が"following": trueであるとはどういう意味ですか?そのユーザーは何かをフォローしていますか?それだけでは、ユーザーが他のすべてのユーザーに従っていることを意味するわけではありません。

おそらくデータベースレイヤーは、ユーザーとフォローアップの2つの異なる概念から構成されています。ユーザーにはユーザーに関する情報が含まれており、次にユーザーが互いに従うものを指定します。

[ 
    {"username": "jake"}, 
    {"username": "jane"} 
] 

そして、私たちはジェーンがジェイクに従っていることを言いたくはなく、他の方法で回避:

たちは二人のユーザーを持っていると言います。

次に、その概念を表すために何かが必要です。

{"follower": "jane", "followee": "jake"} 

場合は以下を作成または削除に関するAPIの協議を、これは、彼らが作成したばかりさを想像おそらく何ですのは、以下のことを呼ぶことにしましょう。そのため、PUTの代わりにPOST/DELETEを使用しています。ユーザーオブジェクトを変更することはありません。ユーザーオブジェクトは、以下を表す他のオブジェクトを作成します。

あなたが他のユーザーの一つとして、特定のユーザに関する情報、を求める際に、ユーザがその特定のユーザーを次のあなたのようにすれば、あなたが知りたいので、彼らはJSON APIレスポンスで"following": true/false部分を持っている理由は、 。

ので、上記の例を考えると、ジェーンはGET /api/profiles/jakeで、ジェイクについての情報を要求するだろうというとき、彼女はこのような何か受け取ることになる:ジェイク約プロファイル情報を求めるだろうというとき、しかし

{ 
    "profile": { 
    "username": "jake", 
    "bio": "...", 
    "image": "...", 
    "following": true 
    } 
} 

をジェーン、彼は代わりにこの応答を得るでしょう:

{ 
    "profile": { 
    "username": "jane", 
    "bio": "...", 
    "image": "...", 
    "following": false 
    } 
} 

だから、彼らはリストの情報をAPIレスポンスが実際にそれがcontaiまた、この特定のユーザーについて、データベースに格納されているものではないとして誰が質問したかに基づいて計算されるいくつかの情報。

+1

データベースレイヤは、APIの設計上の考慮事項とは関係ありません。 POST/DELETEとPUTのセマンティクスはAPIレイヤーにのみ関係します。 –

+0

私は同意します。私はそれを例として使用していただけで、不器用なものかもしれません。この場合の「フォロー」とは、「ユーザープロファイル」とは別の概念であり、リンクされた例が私たちにも同様に伝えようとしているものです。ブール値を単にトグルしているのではないかという質問があります。それは、フォローリクエストが行われた前後でプロファイルのレスポンスが異なるように見えるのではなく、フォローされている/フォローされているという理由の1つを説明しようとする考えを私に与えました。 – Frost

0

microPUTを使用することは確かに妥当な選択肢です。ランダムなAPIチュートリアルが特定の設計上の決定を下した理由を誰にも伝えられないと思います。 POST/DELETEを使用するには、人工的な例が必要なだけかもしれません。

著者がこの質問を表示しない限り、私はそれが疑わしいと思います。フォローステート変更のタイムスタンプなどのメタ情報を保存したいと考えていますが、これはPOST/DELETEとPUTの影響を受けません。

関連する問題