大型医疗挂号微服务“马上好医”医疗项目(4)设计一个医院方接口

本文详细介绍了如何通过数据库建模工具如PowerDesign或Navicat设计医院接口,涉及字段分析、设计原则,以及mybatis-plus的条件构造器在接口编写中的应用。同时讨论了浏览器的同源策略和解决跨域问题的JSONP和后端(CORS)的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何构建一个医院方接口

一、如何进行数据库建模

数据库建模一般需要使用工具PowerDesign,但是其实在navicat中是有类似的功能的

二、分析医院接口会有什么字段

其实很多的同学在入行的时候会有一个问题,没有设计思维。

表字段的设计方案

  • 状态字段
    • 启用/禁用
    • 逻辑删除
  • 并发的乐观锁字段
    • 状态字段
  • 说明字段(备注)
  • 冗余字段
    • 当我们的查询需要多张表进行联合查询的时候,并且某些表只用到了1-2个字段(后续的时候添加的)
  • 关联字段
    • 关联到某些表的时候,逻辑外键的关联
  • 必备的业务字段
    • 按需进行设计
  • 约束设计(其他的设计方式)
    • 非空
    • 长度(合理的长度节省空间,并且我们可以校验数据的有效性)
    • 合理的索引(散列度,散列度比较低的字段,不建议建立索引,也不建议做为条件查询)
      • 列的不同值/列的总行数 电话号码 500W/500W = 1 散列度越趋近1 那么散列度越高 散列度趋近0,散列度越低
  • 溯源字段(创建人,创建时间,修改时间)
    • 创建人 账号的唯一标识
    • 创建时间 记录第一次创建这条记录的时间
    • 修改时间 最后一次修改的时间

三、根据需求确定项目字段

3.1 需求:预约平台需要跟医院内部的his交换签名,但是往往只需要单方面验签。

image.png

hospital_information

医院编号:平台分配,全局唯一 主键索引 id

医院名称 hospname

接口相关的调用密钥Key hospkey

api的基础调用路径 api_url

联系人 contacts

联系人的手机号 contacts_phone

状态字段(启用或者删除) is_disable

创建人 creater

创建时间 create_time

更新时间 update_time

逻辑删除字段 is_delete

image.png

四、编写接口

逆向工程 ------------------- 省略

1.mybatis-plus的条件构造器

编写接口之前,我们需要认识一下我们的mybatis-plus的条件构造器(Wrapper)

2.、AbstractWrapper

QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类
用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件
注意: entity 生成的 where 条件与 使用各个 api 生成的 where 条件没有任何关联行为

2.1、eq、allEq、ne、

eq:等于,参数一个条件

allEq:全等于,参数是一个map集合,可以一次匹配多个条件,

ne:不等于

2.2、gt、ge、lt、le

gt:大于,

ge:大于等于,

lt:小于,

le:小于等于

2.3、between、notBetween

between:在值1和值2之间,

notBetween:不在值1和值2之间

2.4、like、notLike、likeLeft、likeRight

like:’%值%’,

notLike:’%值%’,

likeLeft:’%值’,

likeRight:‘值%’

2.5、isNull、isNotNull

isNull:字段 IS NULL

isNotNull:字段 IS NOT NULL

2.6、in、notIn

in:字段 IN (v0, v1, …),

notIn:字段 NOT IN (value.get(0), value.get(1), …)

2.7、inSql、notInSql

inSql:字段 IN ( sql语句 ),

notInSql:字段 NOT IN ( sql语句 )

2.8、or、and

or:拼接 OR,

and 嵌套

注意事项:
主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and
2.9、exists、notExists

exists:拼接 EXISTS ( sql语句 ),

notExists:拼接 NOT EXISTS ( sql语句 )

2.10、orderBy、orderByAsc、orderByDesc

orderBy:指定是否排序,升序还是降序

orderByAsc:排序:ORDER BY 字段, … ASC,

orderByDesc:排序:ORDER BY 字段, … DESC

3.QueryWrapper

说明:继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取

4、UpdateWrapper

说明:继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取!

5. LambdaQueryWrapper

利用lambda表达式的一个用法(类::静态方法)获得属性对应自带你们,可防止写错字段名

6. LambdaUpdateWrapper

利用lambda表达式的一个用法(类::静态方法)获得属性对应自带你们,可防止写错字段名

跨域问题:

一、为什么会跨域

说到跨域不得不谈的就是浏览器的同源策略,跨域也是因为浏览器这个机制引起的,这个机制的存在还是在于安全。所谓的“同源策略”,最早是由 Netscape公司提出的一个安全策略,后来这就成为了浏览器最核心也最基本的安全功能,现在所有支持 JavaScript 的浏览器都会使用这个策略。

举例:举例来说,http://www.mashibing.com/index.html,这个网址,http是协议,www.mashibing.com是域名,80是端口号(80端口号默认可以省略)。

二、什么是源

Web内容的源由用于访问它的URL 的方案(协议),主机(域名)和端口定义。只有当方案,主机和端口都匹配时,两个对象具有相同的起源。

同源不同源一句话就可以判断:就是url中 scheme host port 都相同即为同源

三、同源不同源举例

同源策略的具体规则如下表所示:

举例:

image.png

四、浏览器为什么需要同源策略

同源策略是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。

五、常规前端请求跨域

在没有前后端分离的时候,跨域问题往往是很少的。因为前后端都部署到一起。现在前后端分离不管vue /react 面临跨域请求的问题。

1.

2.利用JSONP

  • 底层利用script实现,发送请求的传递callback的参数;
  • 服务端可以到这个参数,给这个参数加上一个()然后直接返回给浏览器;
  • 浏览器接收到返回的内容后就会解析成一个js的函数调用,前提先要定义这个函数。

也就是说 其实也是利用

JSONP安全性问题:

1.脚本注入攻击

2.恶意域名—跨站脚本攻击

3.数据泄漏

后端解决的方式

  • @CrossOrigin:在响应头中添加一个地址;
  • 在SpringMVC的配置文件中进行配置。
<mvc:cors>
    <mvc:mapping path="/**" allowed-origins="*"
       allowed-methods="POST, GET, OPTIONS, DELETE, PUT,PATCH"
       allowed-headers="Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
       allow-credentials="true"/>
</mvc:cors>

网关解决跨域问题的方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Add小兵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值