标签: restful-architecture

为什么 HTTP 方法也称为“动词”

我发现 HTTP 方法通常称为Verbs
(我知道正确的名称是方法来自:https://www.rfc-editor.org/rfc/rfc7231

这个名字从何而来?

rest http restful-architecture

6
推荐指数
2
解决办法
2179
查看次数

通过REST API验证/更改密码

我想通过REST API更改用户密码.这不是忘记或重置密码功能,而是登录用户想要更改其密码.

表单需要当前密码,新密码和新密码的确认.但是,我想在用户填写时验证每个表单字段.对于newPasswordconfirmNewPassword(客户端)来说这是微不足道的,但不是currentPassword.目前正在通过执行User对象的更新PUT /users/:id.如果传递了密码参数,我currentPassword会在保存之前检查参数并确保其正确.但是,为了验证,我不确定最好的方法.

我也有POST /users/validate- 不确定这是否也是最好的.这证实一个用户对象都创建和更新,但仅验证属于用户对象(字段email,username,password).currentPassword不是其中之一.想知道如何处理这个问题.我考虑过的一些事情:

POST /users/check_password, POST /users/validate(如果传递了该参数,则添加currentPassword验证,并检查currentPassword是否与用户现有密码匹配)和 POST /users/:id/validate(对现有用户进行单独验证,需要currentPassword).

任何想法或建议将不胜感激.我的第一个应用程序只通过REST API公开功能.

validation rest restful-url restful-architecture

5
推荐指数
3
解决办法
1万
查看次数

RESTful外部HTTP协议

我了解REST是Web的推荐体系结构样式,该样式基本上适用于HTTP协议。我想知道是否在其他协议(如TCP自定义协议)中应用了RESTful体系结构。有人可以将我指向具有这种特征的应用程序,还是可以解释RESTful是否仅用于HTTP。

提前致谢

rest restful-architecture

5
推荐指数
1
解决办法
1055
查看次数

用javascript(框架)消费hateoas restful webservice

是否有可能通过(a)javascript(框架 - 例如angularjs)消费hateoas类型的restful webservice?我想客户端需要实现相当多的逻辑才能到达实际端点.任何反馈都将非常感激.谢谢!

rest restful-architecture asp.net-web-api angularjs

5
推荐指数
1
解决办法
2179
查看次数

自然键和RESTful URL

我有一个RESTful API,我正在设计它使用数字主键的所有资源.然而,一种类型的资源具有方便的自然键,我希望能够将其用作指定单个资源的可选方式.为了保持一致性,可以通过主键访问所有资源.

就目前而言,我可以这样做(假设23是主键):

mysite.com/api/v0/sites/23/
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有一种惯用的方法来为资源指定备用自然键.

到目前为止,我一直想做这样的事情:

mysite.com/api/v0/sites/?domain-name=someothersite.com/
Run Code Online (Sandbox Code Playgroud)

因此,单个站点资源可以通过其主键和自然键(其域名)访问.我主要关心的是以惯用的方式进行此操作,因为我希望尽可能简单地使用API​​.

rest api-design restful-url restful-architecture

5
推荐指数
1
解决办法
1380
查看次数

是否使用子资源?

我们来看下面的例子:

我们希望从RESTful API公开公司和员工信息.

公司数据应该非常简单:

GET api/v1/companies
GET api/v1/companies/{id}
Run Code Online (Sandbox Code Playgroud)

员工属于公司,但我们仍然希望单独检索它们,因此哪种解决方案最好:

解决方案1:使用子资源

获取公司的所有员工:

GET api/v1/companies/{companyId}/employees
Run Code Online (Sandbox Code Playgroud)

获得特定员工:

GET api/v1/companies/{companyId}/employees/{employeeId}
Run Code Online (Sandbox Code Playgroud)

解决方案2:使用独立资源

获取公司的所有员工:

GET api/v1/employees?companyId={companyId}
Run Code Online (Sandbox Code Playgroud)

获得特定员工:

GET api/v1/employees/{employeeId}
Run Code Online (Sandbox Code Playgroud)

两种选择似乎都有其优点和缺点.

  • 对于子资源,当想要检索单个员工时,我可能并不总是拥有CompanyId.

  • 使用独立资源,如果我们想要RESTful,那么让公司的所有员工都应该使用子资源方法.

否则,我们可以使用混合,但这缺乏一致性:

获取公司的所有员工:

GET api/v1/companies/{companyId}/employees
Run Code Online (Sandbox Code Playgroud)

获得特定员工:

GET api/v1/employees/{employeeId}
Run Code Online (Sandbox Code Playgroud)

如果我们想要坚持RESTful标准,那么采取这种情况的最佳方法是什么?

rest restful-url restful-architecture asp.net-web-api asp.net-web-api2

5
推荐指数
1
解决办法
1197
查看次数

具有两个独立主键的实体的RESTful API行为

我有以下实体:

<car>
    <carID>7</carID>
    <...>...</...>
    <externalCarID>23890212</externalCarID>
</car>
Run Code Online (Sandbox Code Playgroud)

现在的问题是,carIDexternalCarID是用于通过/不同系统都独立主键,它应该是可能的API客户端访问一个car与两个实体carIDXOR的externalCarID

这两个键都是整数,并且使用不交集:

carID(7) != externalCarID(7)
Run Code Online (Sandbox Code Playgroud)


我想到了以下解决方案:

  1. 使用/restapi/car/7和访问/restapi/externalcar/23890212
  2. 使用参数,例如like /restapi/car/7?type=regular/restapi/car/23890212?type=ext
  3. 将信息发送到标头中的某处 - 但是在哪里?

一些技巧来解决这个问题或对我的解决方案提供反馈,最好参考REST / HTTP规范,这将是很棒的!

有关主键的背景:

假设我们的发票系统需要carID和母公司控制系统需要externalCarID。我一点都不喜欢它,但是它是一个正在运行的系统,我现在没有办法对其进行更改。

rest restful-url restful-architecture

5
推荐指数
2
解决办法
1800
查看次数

RESTful API设计中的分页问题

我正在为我正在开发的移动应用程序设计RESTful API.我的问题是包含许多项目的大型集合.我知道一个好的做法是在集合中对大量结果进行分页.

我已经阅读了Facebook Graph API文档(https://developers.facebook.com/docs/graph-api/using-graph-api/v2.2),Twitter游标文档(https://dev.twitter.com/概述/ api/cursoring),GitHub API doc(https://developer.github.com/v3/)和这篇文章(API分页最佳实践).

考虑/resources我的API中的示例集合,其中包含100个名为resource1to resource100和sorted descending的项目.这是您在GET请求时得到的响应(GET http://api.path.com/resources?limit=5):

{
    "_links": {
        "self": { "href": "/resources?limit=5&page=1" },
        "last": { "href": "/resources?limit=5&page=7" },
        "next": { "href": "/resources?limit=5&page=2" }
    },

    "_embedded": {
        "records": [ 
            { resource 100 },
            { resource 99 },
            { resource 98 },
            { resource 97 },
            { resource 96 }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是这样的场景:

1- I获取/resources上述内容.

2-之后,会向资源集合添加一些内容(例如,另一台设备会为此帐户添加新资源).所以现在我有101个资源.

3- …

rest pagination api-design mobile-application restful-architecture

5
推荐指数
1
解决办法
1030
查看次数

面试分配 - 设计像S3这样的系统

在我作为软件架构师的一家金融公司的电话采访中," 设计了像AWS S3这样的云存储系统".

以下是我的回答,请您帮助批评和评论以及我的方法.我想根据您的反馈进行改进.

第一

,我列出了要求 - 对象上的CRUD微服务 - 用于提高性能的缓存层 - 在PaaS上部署 - 具有故障转移的弹性 - AAA支持(授权,审计,计费/计费) - 管理微服务(用户,项目,对象的生命周期,SLA仪表板) - 度量标准集合(Ops,Dev) - 管理UI的服务端点的安全性

第二,

我定义了基本的API.
https://api.service.com/services/get Arugments对象id,元数据返回二进制对象 https://api.service.com/services/upload参数对象返回对象id https://api.service.com/services/delete Arugments对象id返回成功/错误 http://api.service.com/service/update-meta Arugments对象id,元数据返回成功/错误

第三,

我用架构和我可以使用的一些COTS组件绘制了图片.下面是图片. 在此输入图像描述

面试官没有问我很多问题,因此我有点担心如果我的进程正确.Pl提供您的反馈..

提前致谢..

architecture caching amazon-s3 restful-architecture

5
推荐指数
1
解决办法
2138
查看次数

无法查询OpenLibrary

我想编写一个查询OpenLibrary的RESTful API,执行以下操作:

  1. 按标题的前五个字母过滤图书清单
  2. 返回书籍的标题,作者,出版日期,描述以及封面大缩略图的链接

到目前为止,这是我能够创造的所有成功:

http://openlibrary.org/query.json?type=/type/edition&authors=/authors/OL1A&covers=&title=&publish_date=&description=
Run Code Online (Sandbox Code Playgroud)

您可以剪切并粘贴到浏览器中以查看结果,OpenLibrary不需要API密钥.

我的主要障碍似乎是:

  1. 我无法弄清楚如何按标题的前五个字母过滤书籍
  2. 我无法弄清楚如何将封面信息转换为实际缩略图的链接

有帮助吗?

api json restful-architecture

5
推荐指数
1
解决办法
142
查看次数