2つの主要パッケージを持つRESTful APIを持つアプリがあります。REST API複数ルートのURL
1つのパッケージは、単純なCRUD操作でDBモデルを公開します。その汎用的な目的は、別のサービスやフロントエンドアプリケーション用の基本データを提供することです。 /api/v{number}/
その他のパッケージは、フロントエンドのチャット動作を避けるために、DBクエリが多いビジネスロジックを表しています。フロントエンドアプリでのみ使用されます。バージョン管理はありません。
どちらのパッケージも同じORMモデルとDBを使用します。
このアプリは社内向けのもので、外部の顧客やユーザーはいません。ちょうど私たちの会社。
主な問題は、これらの機能をURLでどのように表現するかを決めることです。
1.両方のパッケージで同じURLのルート:
domain.com/api/v{number}/...
2.異なるURLのルーツ:簡単なCRUD APIの
domain.com/api/v{number}
domain.com/views/
ビジネスロジックapi
最初のオプション。
長所:
- 当社の開発者は、DBの構造の知識がなくても、単にAPIドキュメントをAPIを使用することができます。
- フロントエンドの開発者は、場所ではなく名前を覚えています。
短所:
- 命名の問題。同じエンティティは異なるdb /ビジネス表現を持ちます。バージョン管理がないので、ビジネスAPIのURLに常設
/v1/
entity_infos、entity_details、entity_deepなど - のような醜いあいまいな名前の原因となります。
- 命名の問題。同じエンティティは異なるdb /ビジネス表現を持ちます。バージョン管理がないので、ビジネスAPIのURLに常設
番目のオプション。
長所:
- ビジネスAPIのためのURLのバージョンはありません。
- 名前の問題はありません。
短所:
- 何の抽象化はありません。単一のテーブルが使用されているか、または重いビジネスロジックがいつ使われているかを知っ
- フロントエンドアプリケーションは、同じリソース名を持つ異なるAPIルートを使用します。新しい開発者にとっては、混乱するかもしれません。
あなたが見ることができるように、1の長所は、別の短所です。
私はよく議論された意見といくつかの関連リンクを聞きたいと思います。おかげさまで ご存知のように、ビューのリスク低減の観点から
これらのリソースが表現が異なる場合は、 ? 'application/vnd.domain.v {number} + json'と' application/vnd.domain.view + json'ですか? – sschrass
@sschrass AFAIKこれは、MIMEタイプによって異なるリソースへの非常に一般的な解決策ではありません。どのリクエストに対してもヘッダーを指定する必要があります。したがって、クライアント側でより多くのコードを指定する必要があります。リクエストを作成するのは難しくなり、あまりフレンドリーではないと思われます。 もう1つの問題があります。サーバー側で青写真を使用してflask-restfultを使用し、ボックスからコンテンツタイプベースのルーティングはありません。私はそれを実装する方法があると信じていますが、それは最も抵抗の少ないパスのようには見えません。 –
あなたの言うことは絶対に有効です。私が信じていることは、同じモデルが異なって表現されるということです。表現は私にとって明らかな選択です。カスタムメディアの種類は一般的に好きではありませんが、このシナリオでは私には受け入れられます。私はフラスコでの経験はありませんが、受け入れ側のヘッダーによるルーティングはありませんが、少し驚いています。 – sschrass