好奇怪呀,感觉所有风格不都差不多嘛

1.REST

REST(REpresentational State Transfer),首次出现在 2000 年 Roy Thomas Fielding 的博士论文中,提出了一种万维网的软件架构风格-REST(全称:Representational State Transfer, 表现层状态转换),目的是便于在不同软件/程序中(例如互联网)中互相传递信息。它指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 REST 的。

约束:客户端-服务器、无状态、可缓存、分层系统、按需代码、统一接口

特征:性能、简单性、可扩展性、可见性、可移植性、可发现性、可修改性、可靠性

2.So-called REST

called 和 so-called 都表示所谓,区别在于,前者是名词性从句,后者是一个形容词,因此在 REST 的设计上主要在于端点的设计。

约束:客户端-服务器、无状态、可缓存、分层系统、按需代码、统一接口

特征:性能、简单性、可扩展性、可见性、可移植性、可发现性、可靠性

So-called REST 是大多数团队的首选,因为遵循 HTTP 协议并提供 REST 的所有属性,统一接口。不幸的是,没有可修改性这个特征意味着 So-called REST 提供的可修改性很差。

3.GraphQL

GraphQL 是一个开源的,面向 API 而创造出来的数据查询操作语言以及相应的运行环境。 于 2012 年仍处于 Facebook 内部开发阶段,直到 2015 年才公开发布。 2018 年 11 月 7 日,Facebook 将 GraphQL 项目转移到新成立的 GraphQL 基金会。

约束:客户端-服务器、无状态、分层系统、统一接口

特征:易于开发、成本、类型安全

GraphQL 提供了令人难以置信的工具和出色的开发体验,可以快速设置和使用,并且可以很好地用于后端和前端的通信。它的发展不如 REST。

4.Apache Kafka

Kafka 是由 Apache 软件基金会开发的一个开源流处理平台,由 Scala 和 Java 编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。其持久化层本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”,这使它作为企业级基础设施来处理流式数据非常有价值。

约束:客户端-服务器,无状态,统一接口

特征:性能、可见性、可扩展性、可发现性、可靠性、类型安全

Kafka 是一种流行的发布订阅风格,快速、可靠且可扩展。虽然它具有基于消息的系统的所有优点:永久存储消息,但它并不适合作为开放平台发布,并且需要大量的 Java 功能。

5.WebSub

WebSub 是一种在互联网传播分布式发布/订阅的开放标准。这种协议为数据订阅延伸了 Atom 和 RSS 协议。主要是为了提供即时更新通知,这将改善客户端获得任意间隔 feed 之情况。

约束:客户端-服务器、无状态、可缓存、分层系统、按需代码、统一接口

特征:简单性、可扩展性、可见性、可移植性、可发现性、可修改性、可靠性

WebSub 是另一种发布订阅 API 风格,从 REST 继承,即使在对外开放也能很好地工作,与语言无关。但是,性能肯定不如 Kafka。

6.SOAP

SOAP 是交换数据的一种协议规范,使用在计算机网络 Web 服务中,交换带结构的信息。SOAP 为了简化网页服务器从 XML 数据库中提取数据时,节省去格式化页面时间,以及不同应用程序之间按照 HTTP 通信协议,遵从 XML 格式执行资料互换,使其抽象于语言实现、平台和硬件。

约束:客户端-服务器,分层系统

特征:可见性、可发现性

它可能不是最现代的风格,但是 SOAP 仍然有它的用途。它非常适合在现有的企业基础设施上进行构建,特别是对于一对一的集成。然而,对于长期战略,一定要考虑其他风格。

7.gRPC

gRPC 是 Google 发起的一个开源远程过程调用 系统。该系统基于 HTTP/2 协议传输,使用 Protocol Buffers 作为接口描述语言。 其他功能: 认证 双向流 流控制 超时 最常见的应用场景是: 微服务框架下,多种语言服务之间的高效交互。

约束:客户端-服务器

特征:性能、简单性、可靠性、安全

gRPC 是一个由谷歌支持的基本 RPC 框架,虽然拥有出色的性能,但它保证了对 REST 或 GraphQL 已经提供的大部分内容进行改造。它不适用于 web 应用程序,也不适用于消息代理。

8.File Transfer

文件传输是指计算机文件通过信道从一台计算机传输到另一台计算机。在计算机历史上,针对不同的文件传输情况,人们设计了许多文件传输协议。

约束:客户端-服务器

特性:易于开发,成本低

简单的文件传输很容易被忽视,不过这是一种廉价且简单的数据传输方式。非常适合不需要频繁的批处理,也不需要实时功能的场景。

API的风格的更多相关文章

  1. 4 种主流的 API 架构风格对比

    1RPC:调用另一个系统的函数 RPC 的工作机制 客户端调用一个远程的过程,将参数和附加信息序列化为消息,然后将消息发送到服务端.服务端在接受到消息后,将信息的内容反序列化,执行所请求的操作,然后将 ...

  2. SpringBoot RESTful API 架构风格实践

    如果你要问 Spring Boot 做什么最厉害,我想答案就在本章标题 RESTful API 简称 REST API . 本项目源码下载 1 RESTful API 概述 1.1 什么是 RESTf ...

  3. Openstack API 类型 & REST 风格

    目录 目录 Openstack 提供了三种操作方式 Web界面 CIL 指令行 RESTful API REST 风格 RESTFul风格的API设计 基于HTTP协议的RESTful API Ope ...

  4. 初探.NET CORE WEB API(RESTful风格)

    前面有4篇系列博客 (一)Asp.net web api中的坑-[找不到与请求 URI匹配的 HTTP 资源] (二)Asp.net web api中的坑-[http get请求中的参数] (三)As ...

  5. RESTful API URI 设计的一些总结

    非常赞的四篇文章: Resource Naming Best Practices for Designing a Pragmatic RESTful API 撰写合格的 REST API JSON 风 ...

  6. ASP.NET Core Web API 开发-RESTful API实现

    ASP.NET Core Web API 开发-RESTful API实现 REST 介绍: 符合REST设计风格的Web API称为RESTful API. 具象状态传输(英文:Representa ...

  7. Rest API 开发 学习笔记(转)

    Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...

  8. Restfull API 示例

    什么是Restfull API Restfull API 从字面就可以知道,他是rest式的接口,所以就要先了解什么是rest rest 不是一个技术,也不是一个协议 rest 指的是一组架构约束条件 ...

  9. C++ API设计

    <C++ API设计> 基本信息 作者: (美)Martin Reddy    译者: 刘晓娜 臧秀涛 林健 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:97871153 ...

  10. Baidu与Google地图API初探

    前天周六,有个好友过来玩,他说想在他的站点中加入地图导航模块,但不知道选择哪个第三方Map API 在网上查了下Baidu.Google.QQ和MapBar等4种Map API(都是採用JS开放API ...

随机推荐

  1. [Untiy]贪吃蛇大作战(一)——开始界面

    前言: 刚学unity没多久吧(大概1个月多点),这是我自己做的除官网之外的第一个游戏demo,中间存在很多不足的地方,但是还是希望可以给需要的人提供一些思路和帮助,有问题的小伙伴可以找我一起探讨一起 ...

  2. Java学习笔记:2022年1月7日

    Java学习笔记:2022年1月7日 摘要:今天的这篇笔记主要是通过讲解基本的JVM结构来理解Java中一些行为的运行机制,进而更加的深入理解Java的运行原理. 目录 Java学习笔记:2022年1 ...

  3. AtCoder Regular Contest 148 B - dp

    题面 For a string \(T\) of length \(L\) consisting of d and p, let \(f(T)\) be \(T\) rotated \(180\) d ...

  4. CF896E Welcome home, Chtholly

    题面 维护一个\(n(n\leqslant 100000)\)个元素序列\(a_1,a_2,\dots,a_n\),有\(m(m\leqslant 100000)\)次操作,分为如下两种. 给定\(l ...

  5. Echarts 折线图Demo调色12种,可以直接使用~~~

    测试Demo代码~~ <template> <div> <div id="myChart" ref="mapBox" style= ...

  6. MySQL8.0性能优化(实践)

    一台几年前的旧笔记本电脑的虚拟系统运行环境,作为本次实践的运行工具,仅供参考. 案例环境:Linux.Docker.MySQLCommunity8.0.31.InnoDB. 过早的MySQL版本不一定 ...

  7. 重写Object类的equals方法-Objects类的equals方法

    重写Object类的equals方法 Object类的equals方法默认比较的是两个对象的地址值,没有意义所以我们学要重写equals方法,比较两个对象的属性值(name,age) 对象的属性值一样 ...

  8. 1月12日内容总结——文件和文件索引、链接、系统时间、克隆、定时任务、paramiko模块、公钥私钥、paramiko代码封装

    目录 一.文件相关信息 二.文件索引信息 三.链接信息 四.系统时间 五.机器克隆 六.定时任务 七.paramiko模块 八.公钥私钥 九.paramiko其他操作 十.代码封装 十一.面试题回忆 ...

  9. java应用定位高cpu占用几步操作

    1.top获取高cpu占用的pid,如266202.查看pid的线程情况, top -H -p 266203.把cpu高占用的线程号转为16进制,printf "%x" 26652 ...

  10. JAVA虚拟机03-常量池项中字面量和符号引用

    转https://baijiahao.baidu.com/s?id=1682261792528500739&wfr=spider&for=pc 1 符号引用 符号引用以一组符号来描述所 ...