标签: restful-architecture

访问RESTful API中对象的版本/修订版

在设计RESTful API时,我们遇到了如何访问"同一对象"的不同版本的问题.让我们说一个页面对象由唯一键标识,并由GET/api/page/pagekey访问.它可以通过发送PUT/api/page/pagekey和正文中的相应文档来更新.

现在,我们的系统会跟踪我们还希望通过API访问的旧版本页面.让我们假设该文档的旧版本是版本1.似乎至少有两种方法可以设计API来访问该特定版本的页面:

  1. GET/api/page/pagekey/1
  2. GET/api/page/pagekey?version = 1

第一个变体将特定版本呈现为自己的资源; 第二个变体为现有资源提供可选的版本上下文.

  • 变体(1)或(2)是更好的解决方案吗?或者有更好的方法吗?
  • 在变体(1)中,对不存在的版本号的请求例如/ api/page/pagekey/7可以触发HTTP 404 Not Found,这是方便的.在考虑变量(2)时,这也是一个有效的状态响应,我们只改变现有资源的上下文"版本",没有版本参数会返回HTTP 200 Ok响应吗?

parameters rest version restful-url restful-architecture

14
推荐指数
2
解决办法
1831
查看次数

如何在单页应用程序和服务器之间保护REST api?

我有2台服务器,一台负责前端应用程序和用户身份验证.此服务器呈现以javascript编码的单个页面应用程序.这个javascript应用程序通过第二台服务器上托管的REST api从第二台服务器渲染数据.

我想保护第二台服务器.我想只有前端应用程序能够调用后端服务器.

目前,任何人都可以从浏览器调用其余的api来查询数据.

谢谢你的帮助.

security api rest restful-authentication restful-architecture

14
推荐指数
1
解决办法
6936
查看次数

剃刀模板,视图和angular.js

TL; DR

使用.NET Razor视图和AngularJS时的最佳做法是什么?

上下文

我们正在使用带有razor的mvc4 开发一个公共网站(不是内部网应用程序),我们对客户端脚本不是很熟悉,所以我们从我们所知道的开始:jQuery.但现在事情变得越来越复杂,我们想切换到AngularJS.

在.NET部分,我们使用Razor模板和UIHintAttribute(加上一些自定义模板)来呈现正确的html"控件".我们还添加了自定义html属性,以便为jQuery部分提供额外信息(例如title工具提示....)

所以我们已经使用了一种设置用户界面行为的声明方式,这就是为什么AngularJS似乎是一个不错的选择.

问题

既然我们已经有模型定义服务器端,并且由于AngularJS也使用模型,它不会强迫我们重复代码吗?

我们如何处理数据绑定功能,因为我们已经做了一些绑定服务器端(在视图中).我们是否应该创建一个完全异步的应用程序,从AngularJS调用AJAX来加载数据,或者我们可以将两者混合使用?

在尝试使用这两种技术时,我们应该注意什么?

我在Google上做过一些研究,但是我找不到将Razor视图和模板与AngularJS混合的详细方法......也许这不是一件好事吗?

asp.net-mvc restful-architecture angularjs

14
推荐指数
2
解决办法
2万
查看次数

为什么PATCH既不安全也不幂等?

我无法理解为什么PATCH在PUT不安全的地方.也就是幂等部分 - 如果我更新资源的一个字段,那么该字段在更新后是否会返回相同的值?

rest http restful-architecture http-patch

14
推荐指数
3
解决办法
6065
查看次数

RESTful API URI设计

我正在寻找关于RESTful API的URI设计的一些方向.我将有几个嵌套的链接资源,目前我的URI设计类似于这篇文章:分层RESTful URL设计

以下示例不是我正在构建的,但我认为很好地说明了我的情况.(假设一个节目只能属于一个网络).

/networks [GET,POST]
/networks/{network_id} [GET,PUT]
/networks/{network_id}/shows [GET,POST]
/networks/{network_id}/shows/{show_id} [GET,PUT]
/networks/{network_id}/shows/{show_id}/episodes [GET,POST]
/networks/{network_id}/shows/{show_id}/episodes/{episode_id} [GET,PUT]
Run Code Online (Sandbox Code Playgroud)

我的情况将进一步增加两个级别的协会,但所有的协会是一对多.我正在考虑将其切换为类似的东西:

/networks [GET,POST]
/networks/{network_id} [GET,PUT]
/networks/{network_id}/shows [GET,POST]

/shows [GET]
/shows/{id} [GET,PUT]
/shows/{id}/episodes [GET,POST]

/episodes [GET]
/episodes/{id} [GET,PUT]
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 第二个例子是有效的REST设计吗?
  2. 我应该考虑实施两条路径吗?

rest uri restful-url restful-architecture

13
推荐指数
1
解决办法
3123
查看次数

是否有必要为移动应用程序构建单独的API端点以访问Rails Web应用程序?

我有一个在Ruby on Rails 4中实现的Web应用程序,需要一个Android原生应用程序,我对移动开发真的很陌生.

关于移动网络架构在这种情况下应该是什么样子,我有点困惑.我在网上做了一些研究,似乎有几种方法可以做到这一点,但我仍然有一些问题,我无法找到答案.提前感谢所有指针.

1)我真的需要一个单独的API用于移动应用程序吗?使用我的Rails应用程序的现有控制器有respond_to format.json什么问题?

2)我已经看到一些在线示例建议在Rails应用程序中使用单独的API命名空间来提供移动请求,例如class Api::ApiController < ActionController::Base为新控制器,然后添加namespace :api doroutes.rb.使用这种方法,是否意味着我需要在这个新的名称空间中为移动设备复制相当多的控制器功能?

3)关于身份验证,许多示例建议使用令牌身份验证,内置的Rails会话管理框架对于移动应用程序来说还不够好吗?或者是因为会话cookie在移动应用程序中的工作方式完全不同?

感谢你的时间.

authentication api mobile restful-architecture ruby-on-rails-4

13
推荐指数
1
解决办法
1874
查看次数

RESTful API:我应该在哪里编写工作流程?

我正在开发RESTful API.这是我的第一个API,也是我的第一个非常大的编码项目.因此,我仍然在学习很多有关建筑等方面的知识.

目前,我在以下层中设置了api:

  • HTTP层
  • 资源层
  • 域模型/业务逻辑层
  • 数据访问/存储库层
  • 持久存储/数据库层

我目前遇到的问题是我需要在哪里放置工作流对象/经理?按工作流程,我的意思是评估最终用户下一步所需的代码.例如,电子商务工作流程.用户将项目添加到购物篮,然后签出,然后填写个人详细信息,然后付款.工作流程将负责决定接下来的步骤,以及不允许的步骤.例如,用户不能通过在输入个人详细信息之前尝试付款来导致API中的错误(可能他们回想起付款的URI并尝试跳过一个步骤).工作流程将检查以前所有步骤是否已完成,如果没有,则不允许付款.

目前,我的工作流逻辑位于资源层中.我正在使用超媒体链接向用户呈现工作流程,例如提供"下一步"链接.我遇到的问题是资源层是顶级层,并且与表示更加一致.我觉得需要对底层域模型有太多了解才能有效地评估工作流,即需要知道它必须personal_detail在允许付款之前检查s实体.

这让我想到工作流属于域模型.这确实更有意义,因为真正的工作流是业务逻辑的一部分,因此我认为最好放在域层中.毕竟,用其他东西替换资源层,您仍然需要基础工作流.

但现在问题是工作流需要知道几个域对象才能完成其逻辑.它现在感觉是对的,它可能会在自己的层中?在资源和域层之间?

  • HTTP层
  • 资源层
  • 工作流层
  • 域模型/业务逻辑层
  • 数据访问/存储库层
  • 持久存储/数据库层

我只是想知道是否有人对此有任何其他意见或想法?正如我所说,我没有过去的应用经验来了解应该放置工作流程的位置.我真的只是第一次学习这个,所以想要确保我正确的方式.

我们将非常感谢您对文章或博客的链接.喜欢阅读不同的实现.

编辑

为了澄清,我发布HATEOAS允许客户端浏览"工作流程",但我的API中必须有一些知道要显示的链接,即它确实定义了允许的工作流程.它在资源中显示与工作流相关的链接,但另外它验证请求与工作流同步.虽然我同意客户可能只会遵循资源中提供的链接,但是休息的危险(和美)是它的URI驱动,因此没有什么可以阻止恶作剧客户试图通过以下方式"跳过"工作流程对URI进行有根据的猜测.API需要发现这一点并返回302响应.

architecture api rest workflow restful-architecture

12
推荐指数
1
解决办法
2714
查看次数

GO应用程序和mongodb的清洁和通用项目结构

我想使用GO和MongoDB构建一个基于API的应用程序.我来自Asp.net MVC背景.可能如果我使用MVC Web应用程序构建一个需要考虑的东西

  1. 关注点分离(SoC)

    • 的DataModel
    • BusinessEntities
    • 商业服务
    • 控制器
  2. Dependeny注射与工作的统一

  3. 单元测试
    • MoQ或nUnit
  4. 与UI框架集成
    • Angularjs或其他人
  5. 支持SEO的RESTful网址

以下架构可以解决我在基于MVC的应用程序中的需求

在此输入图像描述

Web上有资源来构建基于Asp.Net或Java的应用程序,但我还没有找到Golang应用程序架构的解决方案.

是GO与C#或Java不同,但仍然有Structs,Interfaces来创建可重用的代码和通用的应用程序架构.考虑以上几点,我们如何在GO应用程序中创建一个干净且可重用的项目结构,以及如何在DB(Mongodb)事务中创建一个通用的存储库.任何网络资源也是一个很好的起点.

architecture go restful-architecture

12
推荐指数
1
解决办法
4129
查看次数

是否有通过RESTful API将资源权限/ ACL暴露给前端的最佳实践?

问题几乎涵盖了它.给定一个RESTful API,我们有多种资源类型和围绕谁可以CRUD的各种用户权限,是否有任何已建立的最佳实践将这些权限暴露给前端,以便权限不必存储在两个位置?

我有一个纯JS应用程序,我需要知道何时,例如,显示编辑和删除给定资源的链接.我想要一种标准的方法来直接根据存储在后端的ACL做出这些决定.我认为可能会在REST信封中为所有GET响应带回ACL部分,但我希望也许有人知道已建立的最佳实践.

对于它的价值,我也使用Symfony2及其安全组件.

rest symfony restful-architecture

11
推荐指数
1
解决办法
3537
查看次数

Apiary.io - 具有不同参数的多个响应(200)

我试图通过不同的参数获得不同的响应,但有些东西不起作用.

这是我的API:

## Question [/questions/{question_id}]

A Question object has the following attributes:

+ Parameters
    + question_id: `1` (number, required) - ID of the Question in form of an integer

### View a Questions Detail [GET]

+ Request

+ Header

    X-Custom-Header : 1

+ Response 200 (application/json)

        {
            "id": "1",
            "name": "Marco"
        }


+ Request

+ Header

    X-Custom-Header : 2

+ Response 200 (application/json)

        {
            "id: "2",
            "name": "Lucas"
        }
Run Code Online (Sandbox Code Playgroud)

但是在调用/ questions/1或/ questions/2时,响应始终是相同的:

{
    "id": "1",
    "name": "Marco"
}
Run Code Online (Sandbox Code Playgroud)

怎么了?

谢谢

rest restful-architecture apiary.io apiblueprint apiary

11
推荐指数
1
解决办法
4934
查看次数