Entity Framework Core 使用的 Entity Model 是用来表示数据库里面的记录的。

而面向外部的 model 则表示了要传输的东西。这类 model 有时候叫做 Dto,有时候叫做 ViewModel。

举一个例子,人员的Entity Model如下:

最后一个字段表示人员的出生日期。

而它的面向外部的model:PersonDto是这样的:

  • 而API消费者并不需要人员的出生日期,它只是需要人员的年龄,所以在PersonDto里面没有DateOfBirth这个字段,取而代之的是 Age(年龄)这个字段,它是通过转换得到的。

  • 另外一点不同就是在 Person 这个 Entity Model 里面,姓和名是两个不同的属性,而在PersonDto里面,它们连接称为一个Name字段了。

  • 此外,还可能从其它地方获取一些数据,例如 PersonDto 的 Salary 属性就可能来自其它的 Entity Model 或者 API,然后将其组合到 PersonDto里面。

可以看出,把 Entity Model 和 面向外部的 Model 分离开来会使得程序更加健壮、可靠和更易于进化。

假如数据库的表发生了变化,那么 Entity Model 类就需要随之变化,如果你使用同一个 Entity Model 作为 Web API 面向外部直接暴露的 Model 的话,那么 API 消费者就极有可能会遇到问题,因为它们无法预知资源添加、修改或是删除了某些属性。这也让 Web API 的版本控制非常困难,因为直接使用了 Entity Model 作为面向外部的 Model 的话,数据库就无法和 API 分开进化了。所以让两者分开是非常重要的。

HTTP HEAD

HTTP HEAD 和 HTTP GET 之间的关系比较紧密。

HEAD 和 GET 几乎是一样的,只是有一点重要的不同:HEAD 的 API 不应该返回响应的 body,所以也就没有响应 Payload 了。

HEAD 可以用来在资源上获取一些信息,因为响应的 header 是会被返回的。

例如在支持缓存的系统里,HEAD 响应的 header 里可能会包含关于资源是否仍然有效的信息,或者资源是否近期被更新了。

另一个例子就是检查API是否可以访问,也就是说资源是否存在。

使用ASP.NET Core 3.x 构建 RESTful API - 4.1 面向外部的Model的更多相关文章

  1. 使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API

    1. 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作 什么是REST REST一词最早是在2000年,由Roy Fielding在他的博士论文<Archit ...

  2. 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作

    以前写过ASP.NET Core 2.x的REST API文章,今年再更新一下到3.0版本. 先决条件 我在B站有一个非常入门的ASP.NET Core 3.0的视频教程,如果您对ASP.NET Co ...

  3. 使用ASP.NET Core 3.x 构建 RESTful API - 3.4 内容协商

    现在,当谈论起 RESTful Web API 的时候,人们总会想到 JSON.但是实际上,JSON 和 RESTful API 没有半毛钱关系,只不过 JSON 恰好是RESTful API 结果的 ...

  4. 使用ASP.NET Core 3.x 构建 RESTful API - 4.2 过滤和搜索

    向Web API传递参数 数据可以通过多种方式来传给API. Binding Source Attributes 会告诉 Model 的绑定引擎从哪里找到绑定源. 共有以下六种 Binding Sou ...

  5. 使用ASP.NET Core 3.x 构建 RESTful API - 3.2 路由和HTTP方法

    ASP.NET Core 3.x 的路由 路由机制会把一个请求的URI映射到一个Controller上面的Action,所以当你发送一个HTTP请求的时候,MVC框架会解析这个请求的URI,并尝试着把 ...

  6. 使用ASP.NET Core 3.x 构建 RESTful API - 3.3 状态码、错误/故障、ProblemDetails

    HTTP状态码 HTTP状态码会告诉API的消费者以下事情: 请求是否执行成功了 如果请求失败了,那么谁为它负责 HTTP的状态码有很多,但是Web API不一定需要支持所有的状态码.HTTP状态码一 ...

  7. 使用ASP.NET Core 3.x 构建 RESTful API - 5.1 输入验证

    说到验证,那就需要做三件事: 定义验证规则 按验证规则进行检查 报告验证的错误.在把错误报告给API消费者的时候,报告里并不包含到底是服务端还是API消费者引起的错误,这是状态码的工作.而通常响应的B ...

  8. 使用ASP.NET Core 3.x 构建 RESTful API - 3.1 资源命名

    之前讲了RESTful API的统一资源接口这个约束,里面提到了资源是通过URI来进行识别的,每个资源都有自己的URI.URI里还涉及到资源的名称,而针对资源的名称却没有一个标准来进行规范,但是业界还 ...

  9. 使用ASP.NET Core 3.x 构建 RESTful API - 4.3 HTTP 方法的安全性和幂等性

    什么样的HTTP方法是安全的? 如果一个方法不会该表资源的表述,那么这个方法就被认为是安全的. 例如 HTTP GET 和 HTTP HEAD 就被认为是安全的,但需要注意的是,这并不意味着执行GET ...

随机推荐

  1. https原理总结

    博客搬家: https原理总结 最近在公司项目的服务器上做一些内部接口,要求使用https,于是花时间研究了一波.我们熟知的http在传输时未对数据进行加密,在传输一些敏感信息时存在着不小的安全隐患. ...

  2. 快速下载Keil μVision MDK-Arm包

    搜索"MDK Pack",找到Keil官网的MDK包下载页,如下图所示 Keil的官网的域名是Keil.com,下图搜索结果的URL的域名部分被红框标记,那是Keil官网的域名 以 ...

  3. 编译生成protobuf的jar包

    编译生成protobuf的jar包 配置maven 安装maven,并修改maven源为阿里云 下载maven wget http://mirror.bit.edu.cn/apache/maven/m ...

  4. NR / 5G - F-OFDM

  5. 常见Bash命令操作

    常见Bash命令操作 查看当前目录 pwd 查看目录下的文件 ls 进入某个目录 cd 返回上一级目录 cd .. 创建一个目录 mkdir abc 创建一个文件 touch a.html 保存文件退 ...

  6. Linux压缩归档管理

    什么是压缩? 压缩就是用时间换取空间,CPU的时间换取磁盘的空间,下载传输的过程中可以节约带宽. zip/unzip zip支持多平台,支持归档压缩.文件经它压缩后会另外产生具有".zip& ...

  7. finalshell连接工具

    FinalShell功能特点: 1.多平台支持Windows,Mac OS X,Linux2.多标签,批量服务器管理.3.支持登录Ssh和Windows远程桌面.4.漂亮的平滑字体显示,内置100多个 ...

  8. java 开发社区蔬菜、食品交易平台系统 源码

    开发环境:    Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+Mysql数据库 运行效果图 源码及原文链接:https://javadao.xyz/forum.php? ...

  9. 二、GLTF模型支持

    1.安装ColladaToGltf.exe 2. @echo off cd C:\Users\wangc04\Desktop\daeconverting\ColladaToGltfcollada2gl ...

  10. Mac下搭建selenium环境

    1,安装selenium 打开terminal,使用以下命令安装selenium:   pip install -U selenium 2,下载chromedriver,并放在python的安装根目录 ...