点击上方蓝字一起上车吧~

1

01

定义

1、基础接口:单一职责原则,每个接口只负责各自的业务,下接db,通用性强。

2、聚合接口:根据调用方需求聚合基础接口数据,业务性强。

1

02

协议

1. 客户端在通过 API 与后端服务通信的过程中, 应该使用 HTTPS(生产环境) 协议

2. 服务端响应的数据格式统一为JSON

1

03

域名host

prd环境:https://xxx-xxx-api.example.com/

uat环境:https://xxx-xxx-api-uat.example.com/

test环境:https://xxx-xxx-api-test.example.com/

dev环境:https://xxx-xxx-api-dev.example.com/

将api放到子域名里,这种做法可以保持某些规模化上的灵活性。

1

04

路径path

path命名应该是以资源为导向的命名,对资源的操作是由HttpMethod(get、post、put、delete)来决定。所以一般来说url上的单词都应该是名词,一定不要是动词。一般遵循以下约定:

(1)URL 的命名必须全部小写;

(2) URL 必须 是易读的 URL;

(3)一定不可 暴露服务器架构

(4)出现复合词汇使用下划线分隔,例如:animal_types

举几个正面例子:

新增用户:http://localhost/user post方法提交;

修改用户:http://localhost/users put方法提交;

删除文章:http://localhost/articles?author=1&category=2 delete方法提交;

查询用户:http://localhost/users get方法提交;

查询文章:http://localhost/articles?author=1&category=2get方法提交;

错误的例子如下

http://localhost/get_user

https://api.example.com/getUserInfo?userid=1

https://api.example.com/getusers

https://api.example.com/sv/u

https://api.example.com/cgi-bin/users/get_user.php?userid=1

1

05

动词

RESTful 的核心思想就是,客户端发出的数据操作指令都是"动词 + 宾语"的结构,动词通常就是四种 HTTP 方法,对应 CRUD 操作:

其中

(1)删除资源 必须 用 DELETE 方法

(2)创建新的资源 必须 使用 POST 方法

(3)更新资源 应该 使用 PUT 方法

(4)获取资源信息 必须 使用 GET 方法

针对每一个路径来说,下面列出所有可行的 HTTP 动词和端点的组合

1

06

入参

1、如果记录数量很多,服务器不可能都将它们返回给用户。API 应该 提供参数,过滤返回结果。下面是一些常见的参数。

?limit=10:指定返回记录的数量

?offset=10:指定返回记录的开始位置。

?page=2&per_page=100:指定第几页,以及每页的记录数。

?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。

?animal_type_id=1:指定筛选条件

所有URL参数 必须是全小写,必须使用下划线类型的参数形式。

分页参数 必须 固定为 page 、 per_page

经常使用的、复杂的查询 应该 标签化,降低维护成本,如

GET /trades?status=closed&sort=sortby=name&order=asc

#   可为其定制快捷方式

GET /trades/recently_closed

2、入参可分为业务参数和公共参数;公共参数有:

1

07

响应

1、出参(返回值):必须的字段有:

2、如果请求处理完全正确,则状态码为0 ;

3、状态码暂定8位数数字,前4位为某一个应用(服务)拟的一个数字,后4位为具体的状态值。状态码分为2种---公共和自定义,公共码以0打头+3位数。

比如:

99990400  --客户端错误,比如请求语法格式错误、无效的请求、无效的签名等。

99991001  -----用户Id不能为空

响应的公共码如下:

1

08

项目结构

1、采用经典DDD领域取到模型:(默认一个解决方案有5个项目)

5个项目分别为:

Web层为最外层接口定义;

Service为具体的应用服务处理;

Infrastructure基础设施层,处理具体的业务逻辑和数据DB的处理;

Domain领域层为模型和仓库接口interface;

Common为通用的一些Helper类;

2、一个解决方案创建5个项目(如上图),并且里包含常用的基础组件:Log4net日志,听云监听;dockerfile,skywalking,全局异常捕捉,接口请求开始和结束的日志记录,swagger,service层的依赖注入,Mapping等。

3、代码全部采用依赖注入写法,尽量少些静态类;

4、HttpClient的写法:使用采用.netcore官方提供的方法,采用工厂类+依赖注入方式:实例代码如下:

1

09

日志

1、接口开始前和结束后都已在LogstashFilter里记录,接口里就不需要再次记录;

LogstashFilter里的代码如下:

2、try Catch日志必须要添加LogError日志,并且要将堆栈信息记录,代码如下:

▼推荐阅读▼

保利管道微服务1_.netcore 3.1高性能微服务架构:webapi规范相关推荐

  1. httpclient依赖_.NetCore 3.1高性能微服务架构:封装调用外部服务的接口方法HttpClient客户端思路分析...

    护士节快乐 众所周知,微服务架构是由一众微服务组成,项目中调用其他微服务接口更是常见的操作.为了便于调用外部接口,我们的常用思路一般都是封装一个外部接口的客户端,使用时候直接调用相应的方法.webse ...

  2. 保利威Service+战略发布会「服务+技术」开启私域直播新纪元

    植物生长离不开营养元素的供给,只有当肥料与水充分地「溶合」,才能被植物所吸收,茁壮成长. 在围绕技术+服务构建起来的SaaS体系中,这个道理同样适用. 3月22日,保利威Service+战略发布会如期 ...

  3. 【招聘(北京)】.NETCORE开发工程师(微服务方向)

    组织:华汽集团北京研发中心 位置:北京市朝阳区焦奥中心 官网:www.sinoauto.com 邮箱:taoxu.wei@sinoauto.com 项目:打造面向国内汽车后市场用户的一站式云服务平台( ...

  4. 地暖品牌:保利地暖管道系统介绍

    现如今,许多家庭都非常重视家庭装修这一块,为了使自己的家装更加舒服,许多家庭都是用了地暖管,但是现如今市场上的地暖品牌非常的多,令许多消费者都眼花缭乱不知该如何挑选?那么市场有哪些比较好的地暖品牌呢? ...

  5. envoy实现_微服务之服务治理:Envoy 全局 gRPC 限速服务 lyft/ratelimit 详解

    发布 | 才云 Caicloud 作者 | Keon(才云首席客户成功官) 应用微服务架构后,你是否遇到过这些问题?后台资源被大量请求淹没耗尽.客户端持续发起请求直至服务宕机.分布式系统因超时而雪崩- ...

  6. 限时免费 | 12月6日,广州保利洲际酒店,ABC Summit 2018云智峰会来了!

    随着科技的迅猛发展,人工智能技术也逐渐取得了各个突破.自20世纪70年代以来,作为计算机学科的一个分支,人工智能就被列为世界三大尖端技术之一.近年来,阿尔法狗战胜世界第一柯洁,使人工智能再度迎来新的热 ...

  7. 保利的ppr管规格型号有哪些,该怎么做选择

    保利 作为一个知名的生产ppr管材的厂商,为了给消费者提供最完善的服务,生产除了各种品种的ppr管材,一时的人们能有更多的选择.不同的情况下经常需要使用不同的ppr管规格型号,这样才能让我们水的输送更 ...

  8. 微服务等于Spring Cloud?了解微服务架构和框架

    作者:TIM XU 来源:https://xiaoxubeii.github.io/articles/microservices-architecture-introduction/ 微服务初探 什么 ...

  9. 服务网格——后 Kubernetes 时代的微服务(前言)

    目录 重要观点 阅读本文之前 Kubernetes vs Service Mesh kube-proxy 组件 kube-proxy 的缺陷 Kubernetes Ingress vs Istio G ...

最新文章

  1. js中将字符串转换成json的三种方式
  2. android ptrace注入
  3. LintCode 550. 最常使用的K个单词II(自定义set(可修改数据的优先队列) + map)
  4. Codeforces 1167E 尺取法
  5. 几个好朋友在一起吃饭,结账时大家都抢着买单,你会怎么做?
  6. python 3.6中使用open函数遇见的问题
  7. CentOS6.5恢复误删除的文件
  8. 零极点图定性绘制系统的幅频特性
  9. php集成paypal接口,PayPal接口集成之:PHP集成PayPal标准支付接口
  10. my1.exec()==QDialog::Accepted
  11. 智力题----囚犯猜帽子问题
  12. VO、DTO、BO、DO、PO、POJO、Entity的概念、区别和应用
  13. 割裂的前端工程师--- 2017年前端生态窥探 1
  14. 癌症免疫细胞治疗知识:CAR-T与TCR-T的区别在哪里?--转载
  15. 属牛人性格特点及脾气如何呢?
  16. java与英语词汇_Java英语词汇表
  17. php正则表达式总结
  18. 软件工程方法论对我们开发软件有多大用?谈谈你的看法。
  19. scroll-top 设置微信小程序滚动条位置
  20. webStorm创建vue项目环境

热门文章

  1. C#开发笔记之06-为什么要尽可能的使用尾递归,编译器会为它做优化吗?
  2. 《go程序设计语言》读书笔记
  3. ajax使用教程_AJAX教程:什么是AJAX以及如何使用它
  4. typescript 博客_如何使用Typescript自动化博客发布过程
  5. html 比 htm 的载入速度快,htm和html
  6. popen 如何获取指令执行情况_Linux下使用popen()执行shell命令
  7. mysql 本地登录失败 - 已授权
  8. 面试问题:MyBatis和Hibernate的区别
  9. python爬京东(带GUI)
  10. Python论做游戏外挂,Python输过谁?