2017-03-15 23 views
1

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}

2つのオプションがあります。

domain.com/views/ビジネスロジックapi

最初のオプション

  • 長所:

    1. 当社の開発者は、DBの構造の知識がなくても、単にAPIドキュメントをAPIを使用することができます。
    2. フロントエンドの開発者は、場所ではなく名前を覚えています。
  • 短所:

    1. 命名の問題。同じエンティティは異なるdb /ビジネス表現を持ちます。バージョン管理がないので、ビジネスAPIのURLに常設/v1/ entity_infos、entity_details、entity_deepなど
    2. のような醜いあいまいな名前の原因となります。

番目のオプション

  • 長所:

    1. ビジネスAPIのためのURLのバージョンはありません。
    2. 名前の問題はありません。
  • 短所:

    1. 何の抽象化はありません。単一のテーブルが使用されているか、または重いビジネスロジックがいつ使われているかを知っ
    2. フロントエンドアプリケーションは、同じリソース名を持つ異なるAPIルートを使用します。新しい開発者にとっては、混乱するかもしれません。

あなたが見ることができるように、1の長所は、別の短所です。

私はよく議論された意見といくつかの関連リンクを聞きたいと思います。おかげさまで ご存知のように、ビューのリスク低減の観点から

+0

これらのリソースが表現が異なる場合は、 ? 'application/vnd.domain.v {number} + json'と' application/vnd.domain.view + json'ですか? – sschrass

+0

@sschrass AFAIKこれは、MIMEタイプによって異なるリソースへの非常に一般的な解決策ではありません。どのリクエストに対してもヘッダーを指定する必要があります。したがって、クライアント側でより多くのコードを指定する必要があります。リクエストを作成するのは難しくなり、あまりフレンドリーではないと思われます。 もう1つの問題があります。サーバー側で青写真を使用してflask-restfultを使用し、ボックスからコンテンツタイプベースのルーティングはありません。私はそれを実装する方法があると信じていますが、それは最も抵抗の少ないパスのようには見えません。 –

+0

あなたの言うことは絶対に有効です。私が信じていることは、同じモデルが異なって表現されるということです。表現は私にとって明らかな選択です。カスタムメディアの種類は一般的に好きではありませんが、このシナリオでは私には受け入れられます。私はフラスコでの経験はありませんが、受け入れ側のヘッダーによるルーティングはありませんが、少し驚いています。 – sschrass

答えて

0

、オプション2はオプションより1

好ましいが、フロントエンドの開発者は、ビジネスデータへの直接アクセスを持っていてはいけません。あなたのCRUD APIがこれを可能にし、フロントエンドの開発者がそれを使用すると、不可逆的なデータ破損、および企業に対する深刻な評判および財政的損害が発生する可能性があります。

ビジネスデータにアクセスするものは、テストプロセス。この種のテストは、フロントエンドの開発者によって実行されるものではありません(私を信頼してください)。したがって、ビジネスロジック開発者はCRUD APIを使用する唯一のものでなければなりません。フロントエンドの開発者がビジネスロジックによって現在提供されていないデータ操作を必要とする場合、APIの新しいメソッドを計画、開発、およびテストする必要があります。

ビジネスロジックコールが単なるCRUD APIコールを実行しても、フロントエンドの開発者は知る必要はありません。彼らが興味を持っているのは、彼らが要求または提出したデータが正しい方法で処理されることだけです。データベーススキーマが変更された場合(データベースのアップグレード中など)、フロントエンド全体がAPIコールを検索するのではなく、単一のAPIのみを更新する必要があります。 latestのエイリアスが最新のバージョンを参照しており、ビジネスロジックがv1ではなくそれを使用している場合、ビジネスロジックAPIを書き直すことなくCRUD APIを更新できます。 Atlassianによってアプリケーション用に開発されたREST APIは、このエイリアシングを使用します。

異なるURLで2つのAPIを区切ると、それらが異なるターゲットを目指していることがはっきりとわかります。フロントエンドの開発者にCRUD APIのURLを知らせることは、あいまいさによってデータセキュリティのレベルをもたらします。彼らが知らないことはそれらを噛むことができません。

あなたはいつも未来を考えないでください。アプリケーションは「社内」でしか使用できないと言っていますが、会社が新しいビジネスを獲得してAPIを使い始めるとどうなりますか?本当にデータを直接見たいと思っていますか?公開アクセスがAPIに許可されている場合はどうなりますか?あなたは確かにJoe Bloggsと彼のscript-kiddieの友人があなたのデータベースに直接忍び寄ることを望んでいます。 URLを区切ることで、CRUD APIへのアクセスをブロックすることができ、バックドアの経路があるかどうか気にせずに簡単に実現できます。

関連する問題