首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

13 个设计 REST API 最佳实践

响应返回错误详情 当 API 服务器处理错误时,如果能够在返回 JSON body 中包含错误信息,对于接口调用者来说,会一定程度上帮助他们完成调试。...当然可以,不过让我讲一个故事: 我曾经使用过一个 API,对于它返回所有响应状态码均是 200 OK,同时通过响应数据 status 字段来表示当前请求是否成功,比如: {...比如,如果一个 POST 类型端点返回 201 Created,那么所有POST 端点都应返回同样状态码。这样做好处在于,调用者无需在意端点返回状态码取决于某种特殊条件,也就形成了一致性。...不要嵌套资源 使用 REST API 获取资源数据,通常情况下会直接获取多个或者单个,但当我们需要获取相关资源时,该怎么做呢?...但与此同时,结合第 4 点最佳实践,我们就不太能够分清当前端点返回数据到底是 author 类型还是 article 类型。

3.5K20

如何使用Django构建现代Web应用程序来管理客户信息并在Ubuntu 18.04上进行反应

这些设置包括变量,例如INSTALLED_APPS,指定项目的已启用应用程序字符串列表。Django文档提供了有关可用设置更多信息。 urls.py:此文件包含URL模式和相关视图列表。...模型定义应用程序数据字段和行为,而视图使我们应用程序能够正确处理Web请求并返回所需响应。...包含用于处理数据内置包中导入API(用于创建迁移Django API)。...例如,当用户向API端点发送GET请求时,Django会调用相应函数或API视图来处理请求并返回任何可能结果。 我们还将使用序列化器。...我们API端点包括: api/customers:此端点用于创建客户并返回分页客户组。 api/customers/:此端点用于按主键或ID获取,更新和删除单个客户。

13.9K83
您找到你想要的搜索结果了吗?
是的
没有找到

使用FastAPI重写Django官网Polls教程

我们上面创建端点是静态,它们不与数据库交互。在下一节中,您将了解如何使用SQLAlchemy进行 ORM 和Pydantic创建模型/计划,使我们 API 充满活力。...我们将创建以下API端点: 创建投票问题 列出所有投票问题 获取问题详细信息 编辑投票问题 删除投票问题 为特定投票问题创建选择 更新特定问题投票 我们项目结构如下所示,一共就5个文件。...Djangomodels模型很类似,定义了我们数据结构, 只不过是通过sqlalchemy实现。...question_text: str Pyndatic 模型/模组将映射到传入数据POST、PUT 中请求数据)和从 API 返回响应数据。...如果数据是ORM模型,需要进行此项设置。 好,我们现在将创建包含执行CRUD操作所有功能。

1.4K20

Django入门

Model,用于以面向对象方式来操作数据库。 View,接收一个Web请求,然后返回一个Web响应。 使用Django创建项目 1.准备工作 安装Python和使用MySQL数据库。...6.创建App 刚才我们执行django-admin startproject demo创建了一个名为demo项目。一个项目中可能包含多个应用(App),一个应用可能在多个项目中。...官网详情:URL dispatcher 模型 (Model) 模型包含存储数据基本字段和行为,通常,一个模型对应一个数据。 1.创建Model 在创建模型之前,先要想好数据结构。...添加数据 当创建了数据模型之后,Django会自动给到一个数据库抽象API,用于进行数据增删改查。一个模型类表示一个数据,一个模型类实例代表一个数据记录。...图-5 5.删除数据 使用delete()删除QuerySet所有行,返回是删除数量,以及包含删除每个对象类型数量信息一个字典。

1.5K00

python教程

相似地,虽然我们可以在响应对象中带数据,但允许REST框架渲染响应成正确内容类型。...python manage.py createsuperuser 为我们用户模型添加端点 既然我们已经创建了多个用户,那么我们最好将用户添加到我们API。很容易创建一个新序列。...创建一个高亮snippets端点 另一件明显事就是,我们API缺乏代码高亮端点。 和我们所有的API端点不一样,我们不想用JSON,而只是想用HTML显示。...这个装饰器用于添加任何自定义端点,这些端点不符合标准create/update/delete方式。 使用@detail_route装饰器自定义动作会响应GET请求。...如果我们让动作响应POST请求,我们可以使用methods参数。 自定义动作URL在默认情况下是依赖于方法本身。如果你想改变url本来创建方式,你可以将url_path包含在装饰器关键参数中。

5K10

如何从Django应用程序发送Web推送通知

推送通知允许用户选择接收移动和Web应用程序更新。它们还使用户能够使用自定义和相关内容重新使用现有应用程序。...该 send_push 视图将使用Django-Webpush库发送包含用户在主页上输入数据推送通知。...视图通常会为每个请求返回响应。此视图返回一个简单HTML标记作为响应。 我们将创建下一个视图是send_push,它将处理使用该django-webpush包发送推送通知。...在此步骤中,您将更新此文件以包含您在上一步中创建视图新路由以及django-webpush应用程序URL ,这将为订阅用户提供推送通知端点。...您可以在此处阅读有关可用选项更多信息。 成功订阅用户后,下一步是将订阅数据发送到服务器。数据将被发送到django-webpush包提供webpush/save_information端点

9.7K115

REST API 设计最佳实践:如何构建、设计和使用 API ?

高一层次来看,动词映射到CRUD操作:GET表示读取,POST表示创建,PUT和PATCH表示更新,DELETE表示删除 响应状态由其状态码指定:1xx 表示信息, 2xx 表示成功, 3xx 表示重定向...不要返回纯文本 尽管并非强制规定,但大多数REST API通常约定使用JSON作为数据格式。然而,仅返回包含JSON格式字符串响应体是不够好。您还应该指定Content-Type标头。...在响应体中返回错误详情 当API服务器处理错误时,将错误详细信息包含在JSON主体中可以帮助使用者进行调试,这是是非常方便,如果您还能说明哪些字段受到了错误影响,那就更好了!...你API最糟糕事情莫过于返回一个带有200 OK状态码错误响应。 这是最差语义,相反,应该返回一个能准确描述错误类型有意义HTTP状态码。...例如,如果你选择某个POST端点返回201 Created,那么对于每个POST端点都应使用相同HTTP状态码。为什么?因为消费者不应该担心在哪种情况下哪个方法在哪个端点上会返回哪个状态码。

35040

Web安全工具开发

我们使用 Django 自带数据库 SQLite 来存放账户信息,重构了数据auth_user,增加了用户邮箱字段,auth_user 中密码字段是加了 salt sha256 值再经过 base64...Django Model进行建立,字段包含端口号、服务、协议、和状态。...响应头用于指示客户端如何处理响应体,响应头里面包含很多组件信息,用于告诉浏览器响应类型、字符编码服务器类型和字节大小等信息。响应体则是服务器根据客户端请求返回给客户端具体数据。...响应头和响应体中包含了能够识别Web指纹组件字段内容,因此,对响应头和响应体中关键字段提取,是实现指纹识别技术核心。 指纹识别技术分为信息收集阶段和Web指纹识别阶段。...(2)Web指纹识别阶段:该阶段包含两部分,一部分是指纹库建立,该部分主要负责从已知Web应用程序中收集特征信息,并且建立指纹特征库;本文通过分析HTTP响应数据报文,设计了网站指纹提取规则,通过分析响应头字段和响应体内容构建了一个指纹组件信息库

1.3K20

后端框架学习-Django

起始行:方法、路由、协议 headers:请求头 K:V 请求体(body):可能为空 请求方法: GET:返回实体主体 HEAD:调试获取报头 POST:向指定资源提交数据进行处理 PUT:更新...('参数名') 如果有传递多个值,则参数对应应该是一个列表,需要使用getlist方法取出所有值,get方法只能取出最后一个值。...否则返回200代缓存不可用(响应体为最新资源) 上述两个头仅通过精确到秒时间来判断缓存是否有效,不是特别精准,后来HTTP又引入了新缓存头: 3.Etag响应头:返回当前资源唯一标识(由服务器生成...process_template_response(self,request,response) 在响应包含render方法时被调用,该方法返回二次封装后render响应对象。...= paginator.page(页码) page对象属性: object_list:当前页上所有数据对象列表 number:当前页面的序号,从1开始 paginator:当前page对象相关Paginator

9.3K40

Django&DRF重点内容大盘点

2)返回时候用到了 HttpResponse这一命令返回响应对象 1.3.2url地址配置 1.在子应用中urls.py文件中设置当前子应用中url地址和视图对应关系 urlpatterns =...path 请求url路径 META 请求头 COOKIES 客户端发送cookie信息 FILES 客户端上传文件 1.7相应对象构造 1.7.1响应返回json数据 def get_json...地址采用不同请求方式执行不同操作 GET(获取) POST(新增) PUT(修改) DELETE(删除) 3)过滤参数可以放在查询字符串中 4)响应数据返回&响应状态码 状态码 说明 200 获取或修改成功...查询所有的图书数据 2. 返回所有图书json数据 """ # 1....返回所有图书json数据,状态码: 200 books_li = [] for book in books: # 将book对象转换成dict

5.9K20

GraphQL与传统API对比介绍教程

每个URL代表一种资源,服务器返回响应包含资源表示(通常是JSON或XML格式)。优点:简单直观:使用HTTP协议,易于理解和实现。广泛支持:几乎所有的编程语言和框架都支持REST。...标准化:遵循统一资源标识和操作方式。缺点:冗余数据:每次请求通常会返回整个资源对象,可能包含大量不需要数据多个请求:获取相关数据(如嵌套资源)可能需要多次请求,增加了网络开销。...GraphQLGraphQL是一种由Facebook开发查询语言,用于API数据查询和操作。与REST不同,GraphQL允许客户端明确指定需要数据,服务器根据查询返回响应。...优点:灵活性高:客户端可以指定需要字段和嵌套关系,避免冗余数据。单一端点所有查询通过一个端点完成,简化了API设计。强类型系统:提供了明确类型定义和验证,减少了错误发生可能。...GraphQL:可以在一次请求中获取所有相关数据,但复杂查询可能增加服务器负担。

10110

PythonWeb框架之Django

下views中指定视图函数,可以去数据库里面取数据, # 5.视图函数完成具体业务逻辑,和模板渲染,返回字符串响应结果 # 6.将处理结果通过服务器返回给浏览器 Django简单部署操作 CMD:...这个视图会返回一个HttpResponse对象,其中包含生成响应,每个视图函数都负责返回一个HttpResponse对象 DJango使用功能请求和响应对象来通过系统传递状态....请求对象 简单过程 当一个页面被请求时,Django就会创建一个包含本次请求源信息(请求报文中请求行,首部信息,内容主体等) 请求相关常用值 # path_info 返回用户访问url,不包括域名...# method 请求中使用HTTP方法字符串表示,全大写表示 # GET 包含所有HTTP GET参数类字典对象 # POST 包含所有HTTP POST参数类字典对象 # body...也就是说update可以进行批量更新操作,并且他会返回一个更新行记录数量返回值。

2.5K50

设计 API 22 条最佳实践,实用!

在你响应体中包括总资源数 如果API返回一个对象列表,则响应中总是包含资源总数。你可以为此使用total属性。...GET:检索资源表示形式。 POST:创建新资源和子资源。 PUT:更新现有资源。 PATCH:更新现有资源,它只更新提供字段,而不更新其他字段。 DELETE:删除已存在资源。 18....POST /shops:应该创建一个新商店,并返回创建新商店详细信息。在集合url上使用POST。 19....安全 在所有端点、资源和服务上实施HTTPS(tls加密)。 强制并要求所有回调url、推送通知端点和webhooks使用HTTPS。 21....例子包括无效身份验证凭证、不正确参数、未知版本id等。 当由于一个或多个服务错误而拒绝客户端请求时,一定要返回4xx HTTP错误代码。 考虑处理所有属性,然后在单个响应返回多个验证问题。

1.2K10

Django】当大型项目采用Django框架对于QueryDict以及模板表单在Admin 管理工具使用

它用于处理单个键对应多个情况。 QueryDict实现所有标准字典方法。...后面还有一个标签{%csrf_token%}。csrf全称是跨站点请求伪造。这是Django提供防止伪装提交请求功能。POST方法提交表单必须具有此标签。...响应可以是HTML页面、404错误页面、重定向页面、XML文档或图像 无论视图包含什么逻辑,都必须返回响应。代码可以在任何地方编写,只要它在Python目录中,通常在项目视图Py文件中。...每个视图函数负责返回一个HttpResponse对象,该对象包含生成响应。 视图层中有两个重要对象:请求对象和响应对象。 Admin 管理工具 我们可以自定义管理页面以替换默认页面。...返回数据是QuerySet类型,类似于列表。它包含满足条件模型类对象。可以使用索引下标来检索模型类对象。 Pk=3意味着主键=3,这相当于id=3。

1.6K20

TO-do api

如果我们在两个不同应用程序中更新了模型,然后运行python manage.py makemigrations,则生成单个迁移文件将包含两个应用程序中数据。 这只会增加调试难度。...api/有所有待办事项列表位于空字符串 '',即。 每个待办事项都将在其主键上可用,这是Django在每个数据中自动设置值。 第一个条目是1,第二个条目是2,依此类推。...对于给定HTTP响应或请求正文和标头中包含所有信息,根本没有很好可视化效果。 取而代之是,大多数开发人员使用命令行HTTP客户端(例如cURL)(如上一章所述)或HTTPie。...回想一下,HTTP动词GET用于读取数据,而POST用于更新或创建数据。 在“列表待办事项”下显示GET / api /,它告诉我们我们在此端点上执行了GET。...请注意,由于这是一个只读端点,因此不包括POST,我们只能执行GET。 我们还为每个模型制作了一个DetailTodo视图。

3.6K31

使用AJAX获取Django后端数据

但是如果我们只想更新页面的一部分,则不必完全重新渲染页面-这时候就要用到AJAX了。 AJAX提供了一种将GET或POST请求发送到Django视图并接收任何返回数据而无需刷新页面的方法。...它将返回一个response,该response将返回所请求响应。为了从响应中获取数据,我们必须通过多次使用.then处理程序来使用链式response。...第一个.then接收已解析响应并将其转换为JSON。第二个.then允许我们访问第一个.then返回数据,并允许我们使用它,然后可以处理这个数据,比如进行更新页面操作。...BODY POST请求目标是将数据发送到视图并更新数据库。 这意味着我们还需要在fetch调用中包含数据。...我们从POST请求中获得响应将像GET请求一样使用链式承诺进行处理。 在视图中处理POST请求 接受POST请求视图将从请求中获取数据,对其执行一些操作,然后返回响应

7.5K40

Flask 扩展系列之 Flask-R

,像 Flask 一样,你可以返回任何迭代器,它会被转化成一个包含原始响应对象响应,Flask-RESTful还支持使用多个返回时来设置响应码以及响应头,如下: class Todo1(Resource...参数解析 尽管 Flask 提供了便捷方式获取请求数据(例:查询字符串或POST 表单编码数据),验证表单依旧很痛苦。...args = parser.parse_args(strict=True) 数据格式化 默认情况下,在你迭代返回所有的字段都将会原样呈现。...类似 Django ORM 和 WTForm ,你可以使用 fields 模块来描述响应数据结构。...从对象中提取唯一字段是 task。fields.Url是一个特殊字段,它接受端点名称并为响应端点生成一个URL。您需要许多字段类型已经包含在其中。可以查看 fields 项查看完整列表。

97040

爬虫框架Scrapy(二)

举个简单例子: 简单回顾一下三次握手,客户端向服务器发起请求;服务器向客户端返回响应,同时也发起请求;客户端返回响应,确认连接。这是完整三次握手。...body:接收json字符串,为POST数据,发送payload_post请求时使用。 5.web程序运行基本流程: a.客户端发送请求。b.服务器返回响应。...b.Jinja2 7.Flask框架原理: werkzeug.routing中下列4个类 a.Rule:保存了所有的路由规则,url地址、请求方法,端点(就是 url_map中指向视图函数名字符串格式...);可以有多个。...团队开发注意事项 浅谈密码加密 Django框架中英文单词 Django数据相关操作 DRF框架中英文单词 重点内容回顾-DRF Django相关知识点回顾 美多商城项目导航帖

76710

22条API设计最佳实践

在你响应体中包括总资源数 如果API返回一个对象列表,则响应中总是包含资源总数。你可以为此使用total属性。...GET:检索资源表示形式。 POST:创建新资源和子资源。 PUT:更新现有资源。 PATCH:更新现有资源,它只更新提供字段,而不更新其他字段。 DELETE:删除已存在资源。 18....POST /shops:应该创建一个新商店,并返回创建新商店详细信息。在集合url上使用POST。 19....安全 在所有端点、资源和服务上实施HTTPS(tls加密)。 强制并要求所有回调url、推送通知端点和webhooks使用HTTPS。 21....例子包括无效身份验证凭证、不正确参数、未知版本id等。 当由于一个或多个服务错误而拒绝客户端请求时,一定要返回4xx HTTP错误代码。 考虑处理所有属性,然后在单个响应返回多个验证问题。

1.1K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券