大纲 简介 安装 快速入门 一个最小的 api 例子 资源丰富的路由 端点 参数解析 数据格式化 完整 TODO 应用例子 简介 Flask-RESTful是一个Flask的扩展,它增加了对快速构建...,资源是构建在Flask 可插拔的视图之上,只要在你的资源上定义方法就能很容易的访问多个 HTTP 方法,一个待办事项应用的基础 CRUD资源的编写像这样: from flask import Flask...你可以把多个 URLs 传给 Api 对象的 add_resource() 方法。...参数解析 尽管 Flask 提供了便捷的方式获取请求的数据(例:查询字符串或POST 表单编码的数据),验证表单依旧很痛苦。...使用 reqparse 模块同样可以自由地提供全面的错误信息。如果一个参数没有通过校验,Flask-RESTful 将会以一个400的错误请求以及高亮的错误信息回应。
2.1 RESTful APIREST(Representational State Transfer)是一种基于 HTTP 协议的架构风格,它使用标准的 HTTP 方法(如 GET、POST、PUT、...特点:使用 HTTP 方法(GET、POST、PUT、DELETE 等)对资源进行操作。请求和响应的数据通常使用 JSON 或 XML 格式。不同的 URI 代表不同的资源。...SOAP Web Service 通常使用 HTTP 或 SMTP 作为传输协议,并且具有严格的消息格式定义。特点:基于 XML 格式。严格的消息结构和协议规范。...可以通过 HTTP 或其他协议进行传输。3. 如何获取请求信息要判断当前请求属于哪种类型,我们需要从请求中提取相关信息。这些信息通常包括:3.1 请求的 HTTP 方法GET:用于获取资源。...因此,判断 RESTful API 主要依赖以下几个特征:检查 URI 是否符合 RESTful 的资源模式。检查 HTTP 方法是否为标准的 GET、POST、PUT 或 DELETE。
基于 HTTP 协议: RESTful API 设计依赖于 HTTP 协议,使用常见的 HTTP 动词(方法),例如 GET、POST、PUT 和 DELETE。...RESTful API 遵循 HTTP 协议,使用 HTTP 方法(GET、POST、PUT、DELETE)对资源进行操作,这些方法对应着资源的不同操作类型,使得客户端和服务器之间可以以统一的方式进行通信和交互...这种非标准化使得不同的开发人员设计API版本之间的兼容性存在挑战。 安全性危险:RESTful API的HTTP方法可以只由URL进行控制,这也使得攻击者更容易通过更改URL或执行脚本攻击系统。...,调用服务端上的函数或方法。...SOAP 体(Body):SOAP 体是必需的,它包含了具体的方法调用和参数信息。 SOAP 动作(Action):SOAP 动作定义了在 SOAP 消息中所包含方法的名称。
简介 RESTful API是目前比较成熟的一套互联网应用程序的API设计理论 安装 Flask 的 RESTful 模块是 flask-restful ,使用 pip 安装: pip install...flask-restful 像之前的 bootstrop-flask 以及 flask-sqlalchamy 模块一样,使用前需要对 Flask 应用进行初始化,然后会得到当前应用的 api 对象,用...} curl 的参数 -s 是开启安静模式的意思 资源 从上面代码中可以看到,资源是 Resource 类的子类,以请求方法( GET、POST 等)名称的小写形式定义的方法,能对对应方法的请求作出相应...,例如上面资源类中定义的 get 方法可以对 GET 请求作出相应,还可以定义 put、post、delete 等,称之为视图方法。...默认情况下有多个参数错误,会以定义参数的顺序,逐个显示错误,定义解析器时将 bundle_errors 设置为 True,则可显示多个错误,如 parser = reqparse.RequestParser
RESTful API 是遵循 REST 原则的 API,具有以下特点: 无状态性:每次请求必须包含所有必要信息,服务端不保存客户端状态。...版本控制:在 URL 或请求头中标识 API 版本,如 /api/v1/users。 2....HTTP 方法的语义化使用 方法 语义 幂等性 示例 GET 获取资源 是 GET /users POST 创建资源 否 POST /users PUT 替换整个资源 是 PUT /users/123...分页与过滤 查询参数设计: GET /articles?...结语 RESTful API 的简洁性和通用性使其成为现代应用开发的基石。通过遵循资源化设计、合理使用 HTTP 语义和状态码,开发者可以构建出高效、易维护的接口。
常用方法场景举例 RestTemplate 支持所有 Restful 风格方法,你可以根据需要进行选择,这里我们只介绍一些常用的方法。...所有方法都支持URI 模板和 URI 参数,支持下面这种写法: # 类似 spring mvc 中的 @PathVariable https://api.apiopen.top/{method} 3.1...= responseEntity.getBody(); System.out.println("body = " + body); } 上面的方法改为按顺序的可变参数:...3.6 optionsForAllow 该方法获取该 URI 允许的所有请求方法比如 GET、POST、PUT、DELETE 中的一个或者几个。...API,比如你可以定制 GET 方法的请求头,这是getForObject 无法比拟的。
api 的主体部分包括这些: HTTP 方法:GET、POST、PUT、DELETE HTTP Request:URI 路径、路径参数、请求参数 HTTP Response:状态码(2XX、3XX、4XX...抄和使用 example 上文中大概知道了构建 restful api 相关的一些 http 协议的知识, 和内置的库 net/http 的基本使用方法。...通过这个简单的例子,我们大概能够使用 go-restful 了。...方法如何进行的复用 内置库内存在很多的接口,对接口的实现,不断的对内置库的扩展,有可能就重新发明了一个热门的轮子。 go-restful 库便是对内置库 net/http 的扩展。...总结: 阅读源代码首先你需要明确解决的问题是什么,其次你会使用该项目的Demo 或者多个示例,然后你需要根据源代码梳理源代码流程,最后由抄的过程转变为借鉴使用的过程。
request) :content-type (.getContentType request) :content-length (get-content-length...,但是有一点需要注意:多个 middleware 组合的顺序。...使用这里的 handlers 代替上面 Hello World 的示例中的 handler 即可得到一个具有2条路由规则的 Web 应用,同时针对其他路由返回 Page not found!。...Compojure 里面使用了大量宏来简化路由的定义,像上面例子中的GET、not-found等。...,参数获取是通过定制不能的 middleware 实现的,compojure.handler 命名空间提供了常用的 middleware 的组合,针对 RESTful 可以使用 api 这个组合函数,它会把
GET 是幂等的。GET 具有只读的含义。因此,你可以完美的使用缓存。 创建:使用 POST 创建新的资源(非幂等)。 更新:使用 PUT 更新整个资源,PATCH 将部分修改应用于资源。...但是如果你使用任何其他编程语言,如 Python 或 PHP,它们现在也都有解析和操作 JSON 数据的方法。...常见的方式有如下几种。 第一种,使用 DELETE 方法,用多个资源 ID 放进 URL Query 中。 DELETE /api/resource?ids=1,2,3......第二种,使用 DELETE 方法,用逗号分隔将多个资源 ID 放进 URL PATH 中。 DELETE /api/resource/1,2,3......推荐使用第一种方式,使用 DELETE 方法,多个资源 ID 放进 URL Query 中。就像我们使用 GET 请求多个资源时,将筛选条件放到 Query 参数中。
API 请求设计要按照:请求 = 动词 + 宾语 动词:使用五种 HTTP 方法,对应 CRUD 操作。...宾语:URL 应该全部使用名词复数,可以有例外,比如搜索可以使用更加直观的 search 。 过滤信息(Filtering) 如果记录数量很多,API应该提供参数,过滤返回结果。 ?...状态码 1xx 状态码 API 不需要1xx状态码,下面介绍其他四类状态码的精确含义。 2xx 状态码 200状态码表示操作成功,但是不同的方法可以返回更精确的状态码。...403 Forbidden:用户通过了身份验证,但是不具有访问资源所需的权限。 404 Not Found:所请求的资源不存在,或不可用。...不要包装数据 response 的 body直接就是数据,不要做多余的包装。
RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。...REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。...过深的导航容易导致url膨胀,不易维护,如 GET /zoos/1/areas/3/animals/4,尽量使用查询参数代替路径中的实体导航,如GET /animals?...只用以下常见的3种body format: 1.Content-Type: application/json POST /v1/animal HTTP/1.1 Host: api.example.org...URI失效 随着系统发展,总有一些API失效或者迁移,对失效的API,返回404 not found 或 410 gone;对迁移的API,返回 301 重定向。
一条API资产基础信息通常包括以下内容,如下图的第二层所示:其中API唯一资产标识将由API资产基础信息中的操作方法、端点路径、参数计算而来。...query { me { name }}获取简单的请求内容放在 URL 中,在content-type: application/json情况下发布,将 JSON 格式的内容放在请求体里:Get...所以,我们需要通过多种判断条件和方法对RESTful API进行识别:HTTP 方法:HTTP 设计了很多动词,来标识不同的操作,不同的 HTTP 请求方法有各自的含义,就像上面所展示的,RESTful...API 支持4种 HTTP 方法(如 GET、POST、PUT 和 DELETE)来描述操作。...(必须元素)Header: 是一个可选元素,可以使用 SOAP 模块添加新特性和功能。一个Envelope中可以包含多个标题。(可选元素)body: 正文包含实际消息:请求或响应。
什么才是真正的 REST Api 并不是本文的重点(Github Rest API v3),笔者在后文讨论的具体实现,也只是符合目前流行的“RESTful”直觉设计。 2....HTTP 谓词 谓词 释义 幂等性 安全性 HEAD 用于获取资源的 HTTP Header 信息 是 是 GET 用于检索信息 是 是 POST 用于创建资源 否 否 PUT 用于更新或替换完整资源或批量更新集合...对于没有 Body 的 PUT 动作,请将 Content-Length 设置为 0 是 否 DELETE 用于删除资源 是 否 PATCH 用于使用部分 JSON 数据更新资源信息(在一个请求里可搭载多个动作...使用 PATCH 谓词和 JSON Patch(需要使用指定 MIME application/json-patch+json 来表示) 如果请求不以 MIME 的语义定义的方式修改资源,使用具有合理描述的..." } ] 然后再使用返回的oId请求/api/Persons/{id}(UpdateThenAddThenRemoveAsync)接口,body的 JsonPatch 描述则用: /* body
Flask-RESTful 内置了支持验证请求数据,它使用了一个类似 argparse 的库。...使用 reqparse 模块同样可以自由地提供聪明的错误信息。如果参数没有通过验证,Flask-RESTful 将会以一个 400 错误请求以及高亮的错误信息回应。...在 add_argument() 中使用 location 参数可以指定解析参数的位置。flask.Request 中任何变量都能被使用。...这样做的问题就是如果解析器具有共同的参数。 不是重写,你可以编写一个包含所有共享参数的父解析器接着使用 copy() 扩充它。...你也可以使用 replace_argument() 覆盖父级的任何参数,或者使用 remove_argument() 完全删除参数。
,在Magnum的API服务就同时使用了这两种方式,其实pecan还可以和pastedeploy一起使用,ceilometer项目就是这么做的,大家可以看看。...Generic controller继承自object对象,默认没有实现对RESTful请求的方法。...简单的说,RESTful controller帮我们规定好了get_one(),get_all(),get(),post()等方法对应的HTTP请求,而Generic controller则没有,关于这两种...(object): 2 @expose() 3 def index(self, arg): 4 return arg 效果如下,就是把HTTP body解析成了控制器方法的参数...content_type指定响应的content-type,默认值是"text/html" generic参数表明该方法是一个"泛型"方法,可以指定多个不同的函数对应同一个路径的不同的HTTP方法。
HATEOAS的优点有: 具有可进化性并且能自我描述 超媒体(Hypermedia, 例如超链接)驱动如何消费和使用API, 它告诉客户端如何使用API, 如何与API交互, 例如: 如何删除资源, 更新资源...动态类型方案: 需要使用例如匿名类或ExpandoObject等, 对于单个资源可以使用ExpandoObject, 而对于集合类资源则使用匿名类....然后我们添加几个数据塑形的参数: 仍然OK, self的Link里面的href也带着这些参数。 然后是POST Action的方法: 和GET差不多,只不过POST不需要数据塑形。...所以我们返回的content-type的类型是错误的,而且还会导致API消费者无法从content-type的类型来正确的解析响应,也就是说我没有告诉API消费者如何来处理这个结果。...但是OData就不仅仅是HATEOAS了,它正在尝试对RESTful API进行标准化,例如它还对创建Uri、翻页以及调用方法等等都制定了很多规则,还有很多的东西,但是我还是不怎么使用OData。
2、寻址问题 : A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称是什么,这样才能完成调用。...同理,B服务器接收参数要将参数反序列化。B服务器应用调用自己的方法处理后返回的结果也要序列化给A服务器,A服务器接收也要经过反序列化的过程。...REST使用HTTP+URI+XML /JSON 的技术来实现其API要求的架构风格:HTTP协议和URI用于统一接口和定位资源,文本、二进制流、XML、JSON等格式用来作为资源的表述。...://127.0.0.1/user PUT 修改用户信息 http://127.0.0.1/user DELETE 删除用户信息 RESTful风格的体现,在你使用了get请求,就是查询;使用post...方法的参数需要通过底层的网络协议如TCP传递到B服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式 3.
HATEOAS的优点有: 具有可进化性并且能自我描述 超媒体(Hypermedia, 例如超链接)驱动如何消费和使用API, 它告诉客户端如何使用API, 如何与API交互, 例如: 如何删除资源, 更新资源...这个方法表明的我们已经是在驱动应用程序的状态了。这也就是HATEOAS的亮点。 然后就把这些links添加到响应的body即可。首先是GET方法: ?...然后我们添加几个数据塑形的参数: ? 仍然OK, self的Link里面的href也带着这些参数。 然后是POST Action的方法: ? 和GET差不多,只不过POST不需要数据塑形。...下面测试,首先使用原来的application/json: ? 404,没错,因为Content-Type已经不符了。 接下来使用原来的POST方法的媒体类型: ? 就会进入原来的POST方法: ?...但是OData就不仅仅是HATEOAS了,它正在尝试对RESTful API进行标准化,例如它还对创建Uri、翻页以及调用方法等等都制定了很多规则,还有很多的东西,但是我还是不怎么使用OData。
领取专属 10元无门槛券
手把手带您无忧上云