大型医疗挂号微服务“马上好医”医疗项目(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>

网关解决跨域问题的方式

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何写好网评文章?写好了怎么去投稿呢,教程来了

如何写好网评文章&#xff0c;可谓仁者见仁、智者见智。俗话说&#xff1a;“冰冻三尺非一日之寒。”写好网评文章决不是一朝一夕能够练成的&#xff0c;是一个漫长的修炼的过程&#xff0c;需要我们耐得住寂寞、静得下心神。从事网评写作六年多&#xff0c;我有一些心得体会和…

51cto已购买的视频怎么下载到本地

你是否曾在学习51CTO的精品课程时&#xff0c;希望可以随时随地无网络干扰地进行学习&#xff0c;或是想要将这些已购买的课程永久珍藏&#xff1f;今天&#xff0c;你的愿望将要实现。我们将向你揭示如何轻松地将已购买的51CTO视频下载到本地&#xff0c;让学习的路上再也没有…

【Linux线程(一)】线程初理解

前言&#xff1a; &#xff08;一&#xff09;线程的概念 &#xff08;二&#xff09;线程的理解 &#xff08;三&#xff09;示例 &#xff08;四&#xff09;线程优缺点 线程的优点 线程的缺点 &#xff08;五&#xff09;线程和进程的切换 1.线程的切换 2.进程的切换…

感染了后缀为.360勒索病毒如何应对?数据能够恢复吗?

导言&#xff1a; 在数字化时代的浪潮中&#xff0c;网络安全问题如同暗流涌动&#xff0c;威胁着每一个互联网用户的安宁。而近年来&#xff0c;一种名为.360勒索病毒的新型网络威胁逐渐浮出水面&#xff0c;以其独特的加密方式和狡猾的传播策略&#xff0c;给全球网络安全带…

数据库——SQL SERVER(先学删库跑路)

目录 一&#xff1a;什么是数据库 二&#xff1a;为什么需要数据库 三&#xff1a;数据库的安装 四&#xff1a;学前必备知识 1. 数据库原理 2. 数据库与编程语言 3. 数据库与数据结构的区别 4. 连接 5. 有了编程语言为啥还要数据库 6. 初学者学习数据库的三个方面 …

出租车计价器设计与实现(论文 + 源码)

关于java出租车计价器设计与实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89304164 出租车计价器设计与实现 摘 要 在我国&#xff0c;出租车行业是八十年代初兴起的一项新兴行业&#xff0c;随着出租车的产生&#xff0c;计价器也就应运而生。但当时在全…

树状数组(解决单点更新的QSQ问题)

解决单点更新的区间前缀和 #include <iostream> #include <cmath>#define int long longusing namespace std; const int N5e510; int n,T,tree[N]; int lowbit(int i){return i&(-i); } //单点更新 找后继 void add(int id,int val){for(int iid;i<n;iilow…

28.6k Star!Dify:完善生态、支持Ollama与本地知识库、企业级拖放式UI构建AI Agent、API集成进业务!

原文链接&#xff08;更好排版、视频播放、社群交流&#xff09; 28.6k Star&#xff01;Dify&#xff1a;完善生态、支持Ollama与本地知识库、企业级拖放式UI构建AI Agent、API集成进业务&#xff01; 原创 Aitrainee [ AI进修生 ](javascript:void(0)&#x1f609; AI进修…

【C++杂货铺】红黑树

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 红黑树的概念 &#x1f4c1; 红黑树的性质 &#x1f4c1; 红黑树节点的定义 &#x1f4c1; 红黑树的插入操作 &#x1f4c1; 红黑树和AVL树的比较 &#x1f4c1; 全代码展示 &#x1f4c1; 总结 &#x1f308;前言…

mybatis-plus(2)

上文我们介绍完mybatis-plus的常用注解&#xff0c;现在介绍 mp的基础的yaml配置 mybatis-plus:type-aliases-package: #该位置写 数据库对应实体类的全路径global-config:db-config:id-type: auto # 全局id类型为自增长 mp同时也是支持手写sql&#xff0c;而且mapper的读取地…

OpenMVS学习笔记(一):WSL编译安装测试

1.CUDA和CUDNN安装 [1] WSL版本cuda安装&#xff1a; >> wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin >> sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600 >> wg…

weblogic 反序列化 [CVE-2017-10271]

一、漏洞描述 这个漏洞是wls-wsat这个接口出了问题&#xff0c;Weblogic的WLS Security组件对外提供webservice服务&#xff0c;其中使用了XMLDecoder来解析用户传入的XML数据&#xff0c;在解析的过程中出现反序列化漏洞&#xff0c;导致可执行任意命令。攻击者发送精心构造的…

【Unity从零开始学习制作手机游戏】第01节:控制3D胶囊体运动

1. 新建Project L01 使用3D Mobile模板。 2. 建立一个平面&#xff0c;用来承载物体 3. 导入Unity库内的胶囊体 下载 StandardAssets https://download.unitychina.cn/download_unity/e80cc3114ac1/WindowsStandardAssetsInstaller/UnityStandardAssetsSetup-5.6.7f1.exe …

Abaqus显示单元面的编号

注意&#xff1a;这里为了显示单元的面编号&#xff0c;而不是‘Part’的面。对于六面体单元有六个面&#xff0c;编号从1-6&#xff0c;对于四面体单元有四个面&#xff0c;编号从1-4。 1、要显示单元面的编号首先要进入‘Visualization’模块&#xff0c;如下图&#xff1a;…

Jmeter 性能-阶梯负载最终请求数

1、设置阶梯加压线程组请求参数 说明&#xff1a; 每隔2秒钟&#xff0c;会在1秒内启动5个线程 每次线程加载之后都会运行2s然后开始下一次线程加载 最终会加载50个线程并持续运行30s 50个线程持续运行30s后&#xff0c;会每隔2秒钟停止5个线程&#xff0c;剩余的线程继续负…

数据结构与算法-排序算法1-冒泡排序

本文先介绍排序算法&#xff0c;然后具体写冒泡排序。 目录 1.排序算法简介 2.常见的排序算法分类如下图&#xff1a; 3.冒泡排序&#xff1a; 1.介绍&#xff1a; 2.动态图解 3.举例 4.小结冒泡排序规则 5.冒泡排序代码 6.优化 7.优化后时间 代码&#xff1a; 运…

数据库系统概论(个人笔记)(第一部分)

数据库系统概论&#xff08;个人笔记&#xff09; 文章目录 数据库系统概论&#xff08;个人笔记&#xff09;1、介绍1.1 数据库系统应用1.2 数据库系统的历史1.3 数据库系统的目标**大学数据库例子**1.4 数据视图1.5 数据库语言1.6 数据库设计1.7 数据库引擎1.8 数据库体系结构…

2023年上半年信息系统项目管理师——综合知识真题与答案解释(4)

2023年上半年信息系统项目管理师 ——综合知识真题与答案解释(4) 61、文档的规范化管理主要体现在&#xff08;&#xff09;方面。 ①文档书写规范 ②文档质量级别 ③图表编号规则 ④文档目录编写标准 ⑤文档管理制度 ⑥文档安全标准 A&#xff0e;①②③④ B&#xff0e;②③…

MySQL_DDL语句

1.Data类临时数据的弊端 我们之前在将ServletJSP配合处理请求的过程中 数据库起到一个存取数据的作用 但是我们之前的案例中 数据是在Data类中临时定义的 并不是从数据库中获取的 这样做是不好的 因为每一次服务器关闭之后 那么部署在其上的类也会随着卸载 紧接着和类相挂钩的静…

ms17-010(永恒之蓝)

1.漏洞介绍: 永恒之蓝&#xff08;ms17-010&#xff09;爆发于2017年4月14日晚&#xff0c;是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限&#xff0c;以此来控制被入侵的计算机。甚至于2017年5月12日&#xff0c; 不法分子通过改造“永恒之蓝”制作了wannacry勒索病…