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]
コメントを追加