小编Cle*_*ric的帖子

REST-API,无效DELETE的正确HTTP状态代码

我正在设计一个RESTful API,它使用HTTP状态代码和动词作为通信的关键组件.

在宗教层面上,它是在RESTafarian的狂热者一面.

决定HTTP状态代码的经验法则是此图或类似资源.

  • GET /api/documents/1- 401用户尚未登录
  • GET /api/documents/1- 200用户有权限
  • GET /api/documents/1- 403用户没有权限
  • DELETE /api/documents/1- 204用户有权限
  • DELETE /api/documents/1- 403用户没有权限
  • GET /api/documents/2- 404用户权限无关,资源不存在
  • DELETE /api/documents/2- 404用户权限无关,资源不存在
  • DELETE /api/documents/1- 404用户拥有权限,资源已被删除
  • DELETE /api/documents/1- 404用户没有权限,资源已被删除

目标:

  • 使用一致性
  • 不要通过错误公开私人信息
  • 正确使用客户端或中间层缓存的状态代码
  • 尽早失败,将查询保持在最低限度

在这种情况下,有很多不同的状态代码可供选择(404,403,410,405),在我的情况下,我在现有资源上使用403,如果它不是你的不清除缓存,而404是非所有非现有资源,以告诉客户擦除该数据.

但我不喜欢在不属于你的资源上从403切换到404.

我很想听听其他人如何解决这个用例,或者一般情况下你认为适合发送所有无效DELETE调用的状态代码,因为我认为这是最难以简洁的一个.

(整个互联网上的很多REST讨论和答案都只是"扔了400个糟糕的请求,无论如何都不关心",我没有需要快速修复或务实破解的问题.谢谢)

api permissions rest http http-error

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

如何在平面的正面和背面放置两种不同的纹理?

PRoblem:我正在尝试创建(仅仅是为了好玩)一张简单的扑克牌(带有卡片背面和卡片正面).我有两个不同的图像,背面和正面.我轻松创建了一个平面几何体,两面都有一个纹理,但我真的不知道如何为一侧指定纹理而另一面指定另一个纹理......我试过这个(没有成功:():

var textureBack = new THREE.ImageUtils.loadTexture( 'images/cardBack.png' );
var textureFront = new THREE.ImageUtils.loadTexture( 'images/cardFront.png' );      

var material1 = new THREE.MeshBasicMaterial( { map: textureBack } );
var material2 = new THREE.MeshBasicMaterial( { map: textureFront } );

var geometry = new THREE.PlaneGeometry( 90, 110, 1, 1 );            
geometry.faces[ 0 ].materials.push( material1 );
geometry.faces[ 1 ].materials.push( material2 );

var card = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial());
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?:)

javascript textures three.js

10
推荐指数
2
解决办法
6478
查看次数

Mysql IF IN GROUP_CONCAT中断

我正在做一个相当大的SQL所以我道歉,不能提供我的表的更大的例子.

SELECT 
customer_id,
agreement_id,
if( 'network' IN ( GROUP_CONCAT( DISTINCT services.service_code
                                 SEPARATOR ',' )  ),
                  'Yes','No') as networkservice
FROM customers
INNER JOIN agreement USING(customer_id)
INNER JOIN services USING(agreement_id)
GROUP BY customer_id
Run Code Online (Sandbox Code Playgroud)

客户可以签订协议,协议可以提供很多服务.我想要弄清楚的是,"网络"是否是该协议中的服务之一.

由于GROUP_CONCAT返回逗号分隔列表,因此对我的情况来说感觉很完美.但我无法让它工作,我的想法已经不多了.

如果只有一个服务并且该服务是'network'则返回yes,但是如果有多个服务则返回No.

如果我使用(INT)service_id而不是没有区别,除非INT Im正在寻找列表中的第一个.但那仅适用于INT,如果'network'在列表中排在第一位,则返回No.

我试过了:

if( 'network' IN ( CAST(GROUP_CONCAT( DISTINCT services.service_code
                                      SEPARATOR ' ' ) AS CHAR)  ),
                   'Yes','No')
Run Code Online (Sandbox Code Playgroud)

if( 'network' IN ( concat('\'',
                   GROUP_CONCAT(DISTINCT services.service_code
                                SEPARATOR '\', \'' ),
                   '\'') ), 'Yes','No')
Run Code Online (Sandbox Code Playgroud)

如果我的解释听起来很混乱,我可以提供更多的例子.

谢谢.

mysql group-concat

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