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

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. Java基础篇——常用类

    Objec类 Test t1 = new Test(); Test t2 = new Test(); //toString方法,对某个对象的字符串输出 //getClass方法,返回该对象的Class ...

  2. DVWA靶场实战(七)——SQL Injection

    DVWA靶场实战(七) 七.SQL Injection: 1.漏洞原理: SQL Inject中文叫做SQL注入,是发生在web端的安全漏洞,主要是实现非法操作,例如欺骗服务器执行非法查询,他的危害在 ...

  3. iOS开发小结 - 通过PUT请求上传数据

    一般服务器上传数据一般都是用POST请求,这样通过AFNetworking的POST请求稳稳的,但是有一天遇到一个问题,服务器上传数据用的是PUT请求,发现用AFNetworking并不是那么好用,今 ...

  4. html内容超宽后,缩小可视区域后,会引起部分背景色宽度出现显示异常情况,解决如下:

  5. Angular在用户登录后设置授权请求头headers.append('Authorization', 'token');

    方案1. 使用Angular  http import {Injectable} from '@angular/core'; import {Http, Headers} from '@angular ...

  6. Echarts自适应屏幕,无需刷新网页,可根据屏幕大小完美展现,内有详细代码注释,我可真是个小机灵~~O(∩_∩)O哈哈~

    Echarts自适应屏幕,无需刷新网页,可根据屏幕大小完美展现 效果如图 随意拖拉,无惧检验 ~ ~ ~ ~ 下面上代码 里边有详细解释 <template> <div class= ...

  7. RISC-V 平台移植 RTOS

        ARM 上移植实时操作系统大家可能比较熟悉,且例程较多,对于 RISC-V 内核的 MCU,可能相对比较陌生.下面结合 WCH 的 CH32V103 和 CH32V307 两款芯片来详细说下针 ...

  8. 一篇文章带你掌握Flex布局的所有用法

    Flex 布局目前已经非常流行了,现在几乎已经兼容所有浏览器了.在文章开始之前我们需要思考一个问题:我们为什么要使用 Flex 布局? 其实答案很简单,那就是 Flex 布局好用.一个新事物的出现往往 ...

  9. myatbis的一个好的封装

    package com.pj.project4sp; import org.springframework.beans.factory.annotation.Autowired; import org ...

  10. C++练习2 强制类型转换

    const可以把有关的数据定义为常量. const类型可以修饰:对象,指针,引用 使用const_cast为强制类型转换,将常量强制转换非常量. 1 #include <iostream> ...