在基于REST的系统上,"加密"资源ID的选项有哪些.
例如:
/client/2
Run Code Online (Sandbox Code Playgroud)
可以访问
/client/SOMEHASHKEY
Run Code Online (Sandbox Code Playgroud)
我在想 :
1 - 拥有跟踪资源ID的数据库表以及相应的HASH,并在每个请求中查找它.这显然很难实现,并且相当多地增加了服务器的工作量.
2 - 有某种内部加密算法可以根据资源创建日期,资源ID和base64创建一个哈希值(显然不是最优的,但你明白了)
那么这种场景有很好的做法吗?你会推荐什么 ?
非常感谢
对于我正在创建的 RESTful API,我需要有一些获取资源的功能,但如果它不存在,则创建它然后返回它。我不认为这应该是 GET 请求的默认行为。我可以在给 GET 请求的某个参数上启用此功能,但这似乎有点脏。
主要的一点是我只想为此做一个请求,因为这些请求将通过可能具有缓慢互联网连接的移动设备完成,所以我想尽可能地限制需要完成的请求。
我不确定这是否适合 RESTful 世界,但如果它不适合,它会让我失望,因为这意味着我必须对 REST 的想法进行一些修改。
有谁知道这样做的 RESTful 方式,或者不与 REST 理念冲突的漂亮方式?
嘿所以我一直在尝试创建一个RESTful API使用codeigniter 2.1.4.
我是一名中级php程序员,最初辩论从头开始创建API.
然而,经过一些研究,在这里和谷歌上查看旧问题,我选择了几个教程和第三方库.
我在nettuts +上发现的最简单的一个.
这看起来是一个很好的解决方案,因为它使用了philsturgeon/codeigniter-restserver第三方库,但是它自己的教程是在2010年编写的.
经过进一步检查,我意识到使用这些库的大多数教程至少有2到3年的历史.这会引发任何问题吗?
我还可以在nettuts上关注教程+或者我应该编写自己的RESTful API吗?
我们正在使用返回大量数据的REST服务.在生产中,服务器硬件可以处理它.我需要通过获取本地计算机上的数据来测试REST服务,这些数据无法处理大量数据.我的本地机器是4G i5.每次我点击服务时,我都会出现内存异常.
response.getStatus() 返回200状态.但是在使用输入流读取器收集数据时,我得到了内存不足的异常.
BufferedReader br = new BufferedReader(new
InputStreamReader(newByteArrayInputStream(response.getEntity().getBytes())));
Run Code Online (Sandbox Code Playgroud)
有没有其他方法来收集数据而不会遇到内存异常?
我尝试将我的VM大小推到2G,但它仍然无效.
我们正在创建REST API,目前我们有两种方法来定义资源.
基本上我们有Patients,Studies并且Imagesa Patient有n Studies和a Study有n Images.
分层方法
/webapi/patients/0/studies/12/images
Run Code Online (Sandbox Code Playgroud)
层次结构在URI中可见
要搜索所有图像,我们需要搜索资源
/webapi/search?q=imageName:mountain
Run Code Online (Sandbox Code Playgroud)
扁平的方法
/webapi/patients/0
/webapi/studies/12
/webapi/images/
Run Code Online (Sandbox Code Playgroud)
层次结构由属性完成(例如,study 12具有patientId0).
要搜索所有图像,我们可以搜索资源本身:
/webapi/images?q=imageName:mountain
Run Code Online (Sandbox Code Playgroud)
是否有最佳实践方法或者是否有人遇到类似的情况?是一个搜索资源REST还是在平面方法中图像的关系不可见是不好的.
我们还需要考虑移动和修改.
也许我有一个愚蠢的问题,但我试图在OSI层之间分类REST api.(面试问题)它必须在5到7层之间,面试官说:它在5层,因为它类似于RPC.
但在我看来它不能在5会话层,因为真正的REST api是无状态的,不像会话(http会话),所以在我看来,它可以作为协议来自7应用层,因为它就像http(但为什么不在6? ).
我在互联网上搜索一些资源,但我找不到明确的答案.(我知道在OSI中放置的协议并不清楚)但也许您对此有好的看法?
我试图了解如何处理REST中的关系.
我读过这个问题.
如果我有司机和汽车在我的API和驱动程序如果连接到一个只能存在车我会让司机在子资源汽车.Car和Driver之间的关系包含一组属性,比如说averageSpeed和timeOnTheRoad.一辆车可以有很多司机,但司机只能有一辆车.
我该如何添加新驱动程序?我该如何在司机和汽车之间添加关系?
如果我添加一个资源Wunderbaums,它不是汽车的子资源,但Car可以包含Wunderbaums.我该如何在Car和Wunderbaum之间添加关系?
在两个实体之间添加关系的一种方法是POST /entityA/{id}/entityB/{id}并发送正文中关系的属性.这可以用于我的汽车和Wunderbaums示例,因为Wunderbaums不是汽车的子资源,但它在我的汽车和驾驶员示例中不起作用,因为它会干扰驾驶员的 CRUD功能.路径cars/{id}/drivers{id}将创建之间的关系同样车和驱动程序作为创建驱动程序.
我还发现了关于这个问题的未解决的问题.
编辑1
@JB Nizet建议我把关系属性放在Driver里面,因为它有一对多的关系.这将是一个可能的解决方案,但如果一个 …
我有一个资源,本质上需要另一个资源作为创建的输入数据。例如:
POST /v1/NewResource
body: {InputResource}
Run Code Online (Sandbox Code Playgroud)
然而,有趣的是,创建 NewResource 的成本很高,而且资源本身是暂时的(不是持久的)。有些消费者可能只需要部分资源。因此,我确实有两个输入参数:创建所需的数据,然后处理来自消费者的指令以控制实际完成的工作量。
我看到两条路(至少):
POST /v1/NewResource?detailLevel=base|full
body: {InputResource}
Run Code Online (Sandbox Code Playgroud)
与
POST /v1/NewResource
body: {Request.detailLevel and Request.InputResource}
Run Code Online (Sandbox Code Playgroud)
第一个甚至是一个选择吗?有人有任何偏好/经验吗?让有效负载只是所需的数据并与处理指令分开,有一定的优雅性。我意识到这里没有正确或错误的答案,只是对社区的想法感到好奇。
我正在geodjango上构建简单的gis系统.
该应用程序显示一组地图,我也试图为这些地图提供RESTFUL API.
我正在决定是为API创建单独的应用程序还是在现有应用程序内部工作.
这两个应用程序在逻辑上是分开的,但它们共享相同的模型.
那么什么被认为更好?
I want to secure my API with Multi-factor-Authentication on top of Auth Token/JWT. I have been searching but couldn't find any package that can work with drf. I am thinking to write my own django app. Any comments on what should be the architecture ?
我想到的一个解决方案是引入令牌基础架构。如果用户正在访问受 mfa 保护的 api,那么请求实例应该与令牌一起保存,并且应该向他的手机发送一条短信(如果手机作为 mfa ) 并且响应应该是那个标记。然后应该向mfa端点发出另一个请求token and mfa-code。一旦验证,我们将获取他之前的请求对象并完成请求。
django restful-architecture two-factor-authentication django-rest-framework multi-factor-authentication
rest ×8
restful-url ×4
django ×2
api ×1
api-design ×1
codeigniter ×1
geodjango ×1
java ×1
jax-rs ×1
multi-factor-authentication ×1
osi ×1
php ×1
uri ×1
web-services ×1