POST 和 PUT 的不同模型要求

2023-11-24

假设我有一个控制器CatController包括 GET、POST 和 PUT 操作。他们都使用相同的Cat资源可能如下所示:

public class CatDto {
  public int Id { get; set; }

  [Required]
  public string Name { get; set; }

  [Required]
  public bool IsFriendly {get; set; }
}

但是,那Name and IsFriendly仅在创建新猫 (POST) 时才需要属性,而在更新它 (PUT) 时则可选,以允许仅更新单个属性。

到目前为止我处理这个问题的方法只是有两个类,一个CreateCat and UpdateCat它们具有相同的属性但不同的数据注释。但是我不想维护两个几乎相同的类。

我当然可以在每个操作中手动验证模型,但是数据注释对于全局模型验证器和自动生成 Swagger 模式等事情非常有用。

我还使用 Swagger 模式自动生成 SDK(使用ApiMatic),这会导致生成两个重复的类(CreateCat and UpdateCat)实际上应该只是一个资源(Cat).

有没有其他方法可以仅用一个类来实现我想要做的事情?


老实说,我更喜欢保留单独的模型。 您可以拥有一个具有所有公共属性的基本抽象(或不)模型,尽管这不是必需的,只需添加第三个类。有必要吗?我会说不。

POST 和 PUT 之间存在细微差别。如果 PUT 端点中已有 Id 属性,则 POST 和 PUT 都不需要 Id 属性。这样就无需检查 URL 中的 Id 是否与模型中的 Id 匹配。

您的示例并未使差异可见,但在许多情况下,有些字段您并不真正想要更新。例如,假设您有“创建”和“更新”日期字段,您不希望通过 PUT 等方式更改“创建”日期。您不想通过 PUT 更新的数据越多,模型之间的差异就变得越明显和有价值。

在你的情况下,即使有这 2 个属性,我仍然会创建 2 个不同的模型,即使它们实际上是相同的,这设定了 API 如何工作的期望,并在其他正在研究它的人的头脑中创建了一个清晰的设计。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

POST 和 PUT 的不同模型要求 的相关文章

  • 以编程方式获取命名管道的系统名称

    我正在使用 WCF NetNamedPipeBinding 编写进程间通信 我的目标是让服务在 net pipe localhost service 上运行 所以我运行最简单的主机 host new ServiceHost contract
  • C 语言的符号表

    我目前正在开发一种执行模式匹配的静态分析工具 我在用Flex https github com westes flex生成词法分析器 我编写了代码来管理符号表 我不太有经验C 所以我决定将符号表实现为线性链表 include
  • 如何使用c#/VB.NET在word中插入书签

    我正在尝试使用 C 在 Word 文档中添加书签 但它不起作用 而且我在 msdn 文档和互联网上都找不到任何帮助 这就是我正在尝试做的事情 我正在阅读 Word 文档 然后在该文档中搜索关键字 然后将该文本转换为超链接 效果很好 现在 我
  • 计算序列而无法存储值?

    问题陈述 here http www spoj com problems EC SER 令 S 为无限整数序列 S0 a S1 b Si Si 2 Si 1 对于所有 i gt 2 你有两个整数 a 和 b 您必须回答有关序列中第 n 个元
  • 如果将其名称作为参数传递,如何在方法中打开表单

    我正在尝试创建一个标准方法来根据传递给它的参数打开表单 基本上 要完成此任务 using Quotes newQte new Quotes newQte ShowDialog 通过替换 Quotes with a passed parame
  • pybind11 返回 numpy 对象数组

    使用 pybind11 C API 和 python3 我们如何在 C 实现中正确创建一个 numpy 对象数组 即 unicode 字符串 并将其返回给 python 传递到 pybind11 array 的底层数据数组的确切内存布局是什
  • 表达式:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 错误

    此错误发生在运行时 我不确定是什么原因导致的 代码对我来说看起来是正确的 include
  • esp8266互联网交换机问题

    我正在尝试制作一个门继电器开关系统 我可以通过端口转发从任何地方进行操作 我找到了一个非常有用的指南和代码 我的程序基于 https openhomeautomation net control a lamp remotely using
  • 如何使用 Unity 动态注册通用类?

    我有一个包含很多类 300 和 BaseClass 的程序集 我想用接口注册一个泛型类 统一后 您必须在 Name如果你想解析接口的对象数组 我想要一个对象数组主视图模型自动地 有没有办法通过反射来自动执行此操作 有什么建议么 示例 伪 p
  • Web API 2 中的方法名称约定 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否有 Web API 2 中使用的约定的列表 以这两种方法为例 两者都可以工作 但都没有用属性来装饰 IHttpActionResu
  • 如何用C语言创建字典?

    我正在用 C 语言编写一个微控制器 作为它的一部分 我想在 7 段显示器上显示某些字母 每个字母都有一个对应的数字 使 7 段显示屏显示该字母 它没有真正的模式 因为数字只是通过将显示字母所需的 7 段显示器上的位相加而成 因此如果我可以创
  • try-catch 块是否会降低性能[重复]

    这个问题在这里已经有答案了 This link http www cplusplus com doc tutorial exceptions states 为了捕获异常 我们必须将一部分代码放在异常下 检查 这是通过将这部分代码包含在 tr
  • 传输数据的 Symbol.WPAN.Bluetooth 示例

    我正在尝试将 EMDK 附带的 Symbol WPAN Bluetooth 用于 Symbol 设备 有人碰巧有一个传输数据的工作示例吗 Symbol 的示例只是将设备配对 他们显然认为在个人局域网示例中并不真正需要传输数据 不管怎样 我知
  • 如何将日期格式从 DD/MM/YYYY 或 MM/DD/YYYY 更改为 YYYY-MM-DD?

    我需要使用 C 更改日期字符串的格式 来自 06 16 2010 或 16 06 2010 至 2010 06 16 你能帮我实现这个目标吗 thanks 如果您已经将其作为DateTime use string x dt ToString
  • 将 LPTSTR 转换为要写入文件的字符串或 char *

    我想将 LPTSTR 转换为字符串或 char 以便能够使用 ofstream 将其写入文件 有任何想法吗 Use T2A http msdn microsoft com en us library 87zae4a3 VS 80 aspx宏
  • C# 从字符串变量中获取类型并在泛型方法中使用它

    我希望能够通过某种方式 即从数据库 获取我收到的字符串值的实际类型 这样我就可以在通用方法中使用该类型 例如DoSomething
  • 无法在 Visual Studio Code 的 C# 输出上键入任何内容

    所以我试图在 vscode 上运行一个非常基本的 C 程序 代码如下 using System namespace HelloWorld class Program static void Main string args string N
  • Windows 中的蓝牙 AVRCP 命令会触发哪些事件

    可以这么说 只是在做一些高级侦察 对于我的潘多拉客户 Elpis http elpis adamhaile net 我支持全局媒体键 键盘上的 MediaPlayPause MediaNext 等 并且我希望能够支持AVRCP http e
  • 防止使用不完整类型实例化模板类

    我正在写一个库 它的布局看起来类似于 A h include
  • 复杂对象上的 GroupBy(例如 List

    Using GroupBy and Count gt 1我试图在列表中查找我的类的重复实例 该类看起来像这样 public class SampleObject public string Id public IEnumerable

随机推荐

  • 如何为一张纸设置vba代码?

    我目前正试图构建一个运行 sumifs 宏的按钮 我正在尝试构建按钮Sheet1并让 sumif 执行Sheet2 我目前拥有的是 Option Explicit Sub Sumifs Dim Sht2 As Worksheet Dim E
  • 类成员函数模板可以是虚拟的吗?

    我听说C 类成员函数模板不能是虚拟的 这是真的 如果它们可以是虚拟的 那么使用这种功能的场景示例是什么 模板都是关于编译器生成代码的编译时 虚函数都是关于运行时系统确定要调用哪个函数的run time 一旦运行时系统发现需要调用模板化虚拟函
  • 有没有办法为 JUnit 测试用例在内存中运行 MySQL?

    我只是想为访问 MySQL DB 的服务添加测试用例 并且我想重新创建整个架构 对于某些场景 也只需使用 MySQL 转储文件以及每个测试用例所需的数据 我环顾四周 发现有些人使用 SQLite H2 和其他人来做到这一点 但我只是想知道是
  • NPGSQL 与 .netCore 如何登录到架构而不仅仅是数据库

    这是我的NPGSQL连接字符串 ConnectionStrings DataAccessPostgreSqlProvider User ID damienbod Password 1234 Host localhost Port 5432
  • UICollectionView 的动态单元格宽度取决于标签宽度

    我有一个 UICollectionView 它从可重复使用的单元格加载单元格 其中包含标签 数组提供该标签的内容 我可以使用 sizeToFit 根据内容宽度轻松调整标签宽度 但我无法使细胞适合标签 这是代码 void viewDidLoa
  • 如何从内容页访问母版页控件

    我有一个母版页 其中包含状态消息的标签 我需要设置不同 aspx 页面的状态文本 如何从内容页面完成此操作 public partial class Site System Web UI MasterPage public string S
  • PHP:5.2 中需要 json_encode() 5.3 功能

    长话短说 客户端的托管使用的是 php 5 2 5 我迫切需要使用 JSON FORCE OBJECT 选项json encode 5 3 附带的 有谁知道用于此目的的等效项吗 请指出来 在编码之前将其转换为对象在 5 2 5 上对我有用
  • Python 等价于 System('PAUSE')

    我一直在用 python 3 3 编写一个基本计算器 我希望能够在命令窗口中运行它 但当我读到最后时 在我有时间查看最终答案之前它就关闭了窗口 所以我想知道是否有一个相当于 c System PAUSE 命令来告诉它在用户准备好之前不要再继
  • 从另一个项目 ID 访问现有云 SQL 实例

    我已经在 PHP 项目中创建了一个云 sql 实例 并成功完成了计费过程 该项目有效 现在 我想从另一个项目访问我的数据库 但这次是在带有 servlet 的 Java SDK 项目中 使用中的示例https developers goog
  • scanf() 的宽度说明符 - 要使用的字符长度在编译时不固定,仅在运行时确定。如何使其可变?

    我想将字段宽度说明符应用于 scanf 操作来读取字符串 因为明确指定了要读取 使用的字符数 而不是使scanf 容易导致缓冲区溢出的操作 以及目的地参数指向已经匹配的char数组 其元素的大小正好相同 字段宽度的所需值必须为 1 0 这个
  • 如何将文本添加到 pygame 矩形中

    我已经在 pygame 中绘制了一个矩形 但是我需要能够将 Hello 之类的文本放入该矩形中 我怎样才能做到这一点 如果您也能解释一下 将不胜感激 谢谢 这是我的代码 import pygame import sys from pygam
  • 如何使用java生成像apache的htpasswd这样的哈希值

    我在 htpasswd 中使用 强制对密码进行 MD5 加密 来生成哈希 例如我得到的 123 使用 htpasswd 123 gt apr1 kaTbKaLO ewJXRZAKpjaxK4thy2jOp 使用 MD5 摘要 123 gt
  • 如何检查列表是否包含相同顺序的另一个列表

    C 中有没有简单的方法来检查列表是否包含另一个列表 这是一个例子 我有 var list1 new List
  • 虚拟/纯虚拟解释

    如果一个函数被定义为虚函数到底意味着什么 它与纯虚函数相同吗 From 维基百科的虚函数 在面向对象编程中 在 C 和 Object Pascal 等语言中 虚函数或虚方法是可继承且可重写的函数或方法 便于动态分派 这个概念是面向对象编程
  • JavaFX 的 Spinner 在空文本输入上引发 NullPointerException

    我有一个问题 可编辑的 JavaFX 8Spinner导致未捕获NullPointerException如果清除编辑器文本并提交 然后单击递增或递减按钮 这是j8u60 j8u77 如果运气好的话 递增 递减按钮将卡在按下状态 NPE 会继
  • 如何在 Xcode 4 中打开内存浏览器?

    在 Xcode 3 中调试程序时 我经常在单独的窗口中使用内存浏览器来查看缓冲区更改的内容 同时单步执行代码行 当我现在开始使用 Xcode 4 时 我想知道如何打开内存浏览器 我在用户界面中找不到类似的东西 有人可以提供帮助吗 调试时选择
  • Android 10 无法注册 Sensor.TYPE_STEP_COUNTER

    我目前正在开发一个应用程序来跟踪步骤 为了跟踪步骤 我使用手机的以下传感器 传感器 TYPE STEP COUNTER 这对于我测试过的所有设备都运行良好 最近我有机会在三星 S10 设备上测试该应用程序 但它不再跟踪步骤 而它在三星 S9
  • HTML5 视频:可以在视频上放置常规 html 内容

    只是想知道是否有人知道让常规 html 内容 主要是 img 标签 显示在视频顶部 通过 video 标签 的技巧 正如其他人所暗示的 将 HTML 元素放置在VIDEO使用绝对定位的元素 当您尝试在 iPhone iPod 和可能较旧的
  • 如何在 Visual Studio 中提取默认控件模板?

    我想知道如何使用 Visual Studio 提取 获取副本 给定控件的默认模板 我知道这可以使用 Expression Blend 来完成 右键单击控件 编辑模板 gt 编辑副本 然后将默认控件模板复制到我的 Xaml 中 但这可以用 V
  • POST 和 PUT 的不同模型要求

    假设我有一个控制器CatController包括 GET POST 和 PUT 操作 他们都使用相同的Cat资源可能如下所示 public class CatDto public int Id get set Required public