モデル、ビュー、またはシリアライザーは、Django Rest FrameworkのRESTリソースを表していますか?

ヘッジ

Django Rest Frameworkを使用してAPIを構築しており、可能な限りRESTfulにしようとしています。続いて、この質問(ともソフトウェア工学上のこの質問)、私のような私のAPIエンドポイントを公開することをリソースの数、記載しておりInvoice、次のURLで見ることができます。/api/v1/invoices/<invoicenumber>/

ただし、RESTfulな設計原則をDjango RestFrameworkの具体的な動作に関連付けるのに問題があります。リソースを構成するものが何であるか(モデル、シリアライザー、またはビュー)は私にはわかりません

特に、自分のcalculate_total()メソッドを実装する正しい場所について混乱しています通常のDjangoアプリケーションでは、それは確かに請求書モデルに存在します。

class InvoiceModel(models.Model):
    def calculate_total(self):
         # do calculation
         return total

実際の計算は複雑になる可能性がありますが、「合計」は概念的には請求書の表現一部ですこの意味で、リソースはInvoiceSerializerと同等です。

class InvoiceSerializer(serializers.Serializer):
    total = serializers.SerializerMethodField()

    def get_total(self, obj):
        # do calculation
        return total

最後に、リソースには常にビューからアクセスします。したがって、ビューは実際にはリソースであり、シリアライザーとモデルは単に実装の詳細であると主張することもできます。

class InvoiceView(APIView):
    def calculate_total(self, obj):
        # do calculation
        return total

上記のクラスの1つをリソースとしての請求書の正規表現として指定する必要がある場合、どれになりますか?モデルクラス、シリアライザークラス、またはビュークラスにメソッドを実装する必要がありますか?または、おそらく私はこれを考えすぎており、それらのいずれかが行いますか?

カベスオン

まあ、私は別の解決策があるかもしれないことに同意しますが、この場合、私は間違いなくモデルを使います。リソースおよび関数を配置する場所として。

関数の場合、請求書の計算された属性として実装することもできます。実際、私にはTOTALはメソッドというよりも属性のように見えます。

とにかく、あなたの思考の流れと、他の2つのオプション、シリアライザーとビューに到達する方法は私には興味深いようです。

モデルは間違いなくリソースだと思います。この場合、私にとっては、請求書リソースがモデルです。つまり、APIが公開するすべてのモデルはリソースであると言えます。

また、リソースが単一のモデルに直接関連していない場合は常に、ビューをリソースと見なすことができると思います。

さて、シリアライザーは私にとって謎です。資源だとは思えない。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

TOP 一覧

  1. 1

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  2. 2

    CSSのみを使用して三角形のアニメーションを作成する方法

  3. 3

    ZScalerと証明書の問題により、Dockerを使用できません

  4. 4

    ドロップダウンリストで選択したアイテムのQComboBoxスタイル

  5. 5

    別のホストからTomcat Managerアプリにアクセスする

  6. 6

    PyCharmリモートインタープリターはプロジェクトタブにサイトパッケージのコンテンツを表示しません

  7. 7

    Windows 10でのUSB入力デバイスの挿入/取り外しの検出

  8. 8

    Python / SciPyのピーク検出アルゴリズム

  9. 9

    MLでのデータ前処理の背後にある直感

  10. 10

    useRefに反応してコンポーネントをスクロールして表示する

  11. 11

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  12. 12

    パンダは異なる名前の列に追加します

  13. 13

    PictureBoxで画像のブレンドを無効にする

  14. 14

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  15. 15

    Pythonを使用して、リストからデータを読み取り、特定の値をElasticsearchにインデックス付けするにはどうすればよいですか?

  16. 16

    LinuxでPySide2(Qt for Python)をインストールするQt Designerはどこにありますか?

  17. 17

    Material-UIでTextFieldエラーの色を条件付きでオーバーライドする方法

  18. 18

    goormIDEは、ターミナルがロードするデフォルトプロジェクトを変更します

  19. 19

    MatplotlibまたはSeabornを使用して、グループ化されたデータから複数のプロットを生成するにはどうすればよいですか?

  20. 20

    Luaの文字列から特定の特殊文字を削除するにはどうすればよいですか?

  21. 21

    Flutterにファイルピッカープラグインを追加するにはどうすればよいですか?

ホットタグ

アーカイブ