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

如何构建一个医院方接口

一、如何进行数据库建模

数据库建模一般需要使用工具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>

网关解决跨域问题的方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

江苏省生态环境工程专业技术资格条件

江苏省生态环境工程专业技术资格条件评审文件链接江苏省生态环境厅 人事管理 省专业技术人员职称&#xff08;职业资格&#xff09;工作领导小组关于印发《江苏省生态环境工程专业技术资格条件&#xff08;试行&#xff09;》的通知评审工作的通知江苏省生态环境厅 年度职称评审…

怎么把图片大小缩小到1M?教你几招图片你压缩

当我们的图片数量越来越多的时候&#xff0c;占用的内存也就越来越多&#xff0c;时间长了之后&#xff0c;会导致我们空间不足或者设备比较卡顿&#xff0c;为了缓解这个问题&#xff0c;很多人会选择去删除一些不必要的图片文件&#xff0c;其实还有个方法就是利用图片压缩的…

Workfine签章方案使用说明

概述 为支持绝大部分第三方签章平台&#xff0c;Workfine针对性添加了部分动作事件与message支持。用户只需要自己开发中间代理程序&#xff0c;用于Workfine与签章平台的通讯即可完成整套签章方案。 整体业务流程图如下&#xff1a; 设计端添加发送PDF动作事件&#xff0c;生…

Duplicate entry ‘1‘ for key ‘sys_patient_info.user_id‘

报错信息 Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry 1 for key sys_patient_info.user_id ### The error may exist in file [D:\learn\Project\RuoYi-Vue-master\ruoyi-system\target\classes\mapper\system\Sys…

JavaScript DOM 获取元素的各种方法

在JavaScript中&#xff0c;DOM&#xff08;文档对象模型&#xff09;提供了许多方法来获取元素。这些方法可以通过元素的标签名、类名、ID和选择器等来获取元素。下面是一些常用的获取元素的方法和相应的代码示例。 通过标签名获取元素 var elements document.getElementsB…

宁夏银川最牛起名大师的老师颜廷利:宝与饱,饿跟恶

对于中国优秀传统文化之根-汉语而言&#xff0c; 恶&#xff0c;对应着‘饿’&#xff1b; 宝&#xff0c;对应着‘饱’… 由此可见&#xff0c;无论是‘饿’&#xff08;与‘恶’同音&#xff09;&#xff0c;还是‘饱’&#xff08;与‘宝’通音&#xff09;&#xff0c;实际…

SqlServer2016安装

1、下载 下载地址&#xff1a; https://www.microsoft.com/en-us/server-cloud/products/sql-server-2016/ 或者 MSDN, 我告诉你 - 做一个安静的工具站 开发版下载地址&#xff1a;https://myprodscussu1.app.vssubscriptions.visualstudio.com/downloads KB2919442下载地址…

四川在线教育系统平台,培训机构这个行业以后会如何发展?前景怎样?

说到培训机构&#xff0c;其实存在的时间也不算了&#xff0c;但是这个行业以后会如何发展?其实&#xff0c;很多人心里还没有底&#xff0c;担心这个行业没有未来?但事实是否如此?其实&#xff0c;部分人还有不少的疑惑&#xff0c;所以&#xff0c;想了解下这个行业的情况…

Django 安全性与防御性编程:如何保护 Django Web 应用

title: Django 安全性与防御性编程&#xff1a;如何保护 Django Web 应用 date: 2024/5/13 20:26:58 updated: 2024/5/13 20:26:58 categories: 后端开发 tags: CSRFXSSSQLUploadHTTPOnlyPasswordSession 跨站请求伪造&#xff08;CSRF&#xff09; 跨站请求伪造&#xff0…

【一站式学会Kotlin】第五节匿名函数

作者介绍&#xff1a; 百度资深Android工程师T6&#xff0c;在百度任职7年半。 目前&#xff1a;成立赵小灰代码工作室&#xff0c;欢迎大家找我交流Android、微信小程序、鸿蒙项目。文章底部&#xff0c;csdn有为我插入微信的联络方式&#xff0c;欢迎大家联络我。 一&#x…

C++:重载、重写与重定义

一、重载、重写与重定义的概念 C中&#xff0c;重载、重写和重定义是三个与函数和类成员相关的概念&#xff0c;但它们具有不同的含义和用途。 重载&#xff1a;是指在同一作用域内&#xff0c;可以有多个名称相同但参数列表&#xff08;参数类型、参数个数或参数顺序&#x…

Offer必备算法38_贪心算法四_八道力扣题详解(由易到难)

目录 ①力扣56. 合并区间 解析代码 ②力扣435. 无重叠区间 解析代码 ③力扣452. 用最少数量的箭引爆气球 解析代码 ④力扣397. 整数替换 解析代码1_递归改记忆化搜索 解析代码2_贪心策略 ⑤力扣354. 俄罗斯套娃信封问题 解析代码1_动态规划&#xff08;超时&#xf…

攻防演练-防守单位常见防守策略

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 防守单位常见防守策略 01 防守单位常见防守策略 为普及网络安全知识&#xff0c;提高网络安全防范意识&#xff0c;和网络安全工作技能。我们将向大家介绍网络安全攻防演练中防守单位的一些关键策…

数据结构(七)复杂度渐进表示

数据结构&#xff08;七&#xff09;复杂度渐进表示 要点&#xff1a;复杂度相加取较大值&#xff0c;嵌套取二者乘积 思考&#xff1a;为什么只需要知道复杂度的趋势就可以了&#xff1f; 01 复杂度的渐进表示法 Ω复杂度渐进表示法区分复杂度T(n)的上界&#xff08;o&…

Android11系统去掉截屏功能

1. 去掉Settings里截屏菜单条目&#xff0c;packages/apps/Settings&#xff1a; diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml old mode 100644 new mode 100755 index a5e4d06..a9420bb --- a/res/xml/top_level_settings.xmlb/res/xml/t…

【JVM基础篇】打破双亲委派机制

文章目录 打破双亲委派机制自定义类加载器双亲委派机制核心代码打破双亲委派机制自定义类加载器父类怎么是AppClassLoader呢&#xff1f;两个自定义类加载器加载相同限定名的类&#xff0c;不会冲突吗&#xff1f;拓展类加载器功能 线程上下文类加载器JDBC案例那么问题来了&…

博客管理系统

文章目录 博客管理系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目&#xff08;9.9&#xffe5;带走&#xff09; 博客管理系统 一、项目演示 博客系统 二、项目介绍 三个角色&#xff1a;游客 用户 管理员 游客可以浏览文章&#xff0c…

[Kubernetes] sealos 部署 K8s v1.25.0 集群

文章目录 1.sealos 介绍2.操作系统基础配置3.安装部署 K8s4.验证 K8s 集群5.部署测试资源 1.sealos 介绍 Sealos 是一个基于 Kubernetes 内核的云操作系统发行版。它采用云原生方式&#xff0c;摒弃传统的云计算架构&#xff0c;转向以 Kubernetes 为云内核的新架构。这使得企…

FileZilla一款免费开源的FTP软件,中文正式版 v3.67.0

01 软件介绍 FileZilla 客户端是一个高效且可信的跨平台应用程序&#xff0c;支持 FTP、 FTPS 和 SFTP 协议&#xff0c;其设计宗旨在于为用户提供一个功能丰富且直观的图形界面。此客户端的核心特性包括一个站点管理器&#xff0c;该管理器能有效地存储和管理用户连接详情及登…

c++ (C++ Primer 中文版(第 5 版))奇妙判奇偶

奇妙判奇偶 平时&#xff0c;咱们判断一个数是奇还是偶时&#xff0c;使用对2取模的方法&#xff0c;今天偶然看到一个新的方法&#xff1a;i& 0x1。该法将i与16进制1按位与&#xff0c;效果是取i二进制最近一位的数值&#xff0c;是0就是偶数&#xff0c;是1就是奇数。测…