小编San*_*ues的帖子

了解REST:动词,错误代码和身份验证

我正在寻找一种方法来在我的基于PHP的Web应用程序,数据库和CMS中围绕默认函数包装API.

我环顾四周,发现了几个"骨架"框架.除了我的问题的答案,还有Tonic,我喜欢的REST框架,因为它非常轻量级.

我最喜欢REST,因为它简单,并且希望基于它创建一个API架构.我试图了解基本原则并且还没有完全理解它.因此,一些问题.

我理解对吗?

假设我有一个资源"用户".我可以像这样设置一些URI:

/api/users     when called with GET, lists users
/api/users     when called with POST, creates user record
/api/users/1   when called with GET, shows user record
               when called with PUT, updates user record
               when called with DELETE, deletes user record
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是RESTful架构的正确表示吗?

我需要更多的动词

理论上创建,更新和删除可能就足够了,但在实践中我需要更多的动词.我意识到这些内容可以嵌入到更新请求中,但它们是具有特定返回代码的特定操作,我不想将它们全部放入一个操作中.

用户示例中的一些想法是:

activate_login
deactivate_login
change_password
add_credit
Run Code Online (Sandbox Code Playgroud)

我将如何表达RESTful URL架构中的操作?

我的直觉是对像这样的URL进行GET调用

/api/users/1/activate_login 
Run Code Online (Sandbox Code Playgroud)

并期望返回状态代码.

但是,这偏离了使用HTTP动词的想法.你怎么看?

3.如何返回错误消息和代码

REST的美丽很大一部分源于其使用标准HTTP方法.如果出错,我会发出一个包含3xx,4xx或5xx错误状态代码的标头.对于详细的错误描述,我可以使用正文(对吗?).到现在为止还挺好.但是,传输专有错误代码的方法是什么,该错误代码在描述错误时更详细(例如"无法连接到数据库"或"数据库登录错误")?如果我把它和信息一起放入体内,我必须在事后解析它.这种东西有标准的标题吗?

4.如何进行身份验证

  • 遵循REST原则的基于API密钥的身份验证是什么样的?
  • 在验证REST客户端时,是否有强烈反对使用会话的优点,除了它是公然违反REST原则?:)(这里只有半开玩笑,基于会话的身份验证可以很好地与我现有的基础设施配合使用.)

rest web-services

593
推荐指数
9
解决办法
13万
查看次数

使用Javascript上传前检查图像宽度和高度

我有一个JPS,其中包含一个用户可以放置图像的表单:

<div class="photo">
    <div>Photo (max 240x240 and 100 kb):</div>
    <input type="file" name="photo" id="photoInput" onchange="checkPhoto(this)"/>
</div>
Run Code Online (Sandbox Code Playgroud)

我写过这个js:

function checkPhoto(target) {
    if(target.files[0].type.indexOf("image") == -1) {
        document.getElementById("photoLabel").innerHTML = "File not supported";
        return false;
    }
    if(target.files[0].size > 102400) {
        document.getElementById("photoLabel").innerHTML = "Image too big (max 100kb)";
        return false;
    }
    document.getElementById("photoLabel").innerHTML = "";
    return true;
}
Run Code Online (Sandbox Code Playgroud)

它可以很好地检查文件类型和大小.现在我想检查图像的宽度和高度,但我不能这样做.
我试过target.files[0].width但我得到了undefined.通过其他方式我得到0.
有什么建议?

javascript file-upload image image-size

97
推荐指数
7
解决办法
17万
查看次数

存储库模式是什么类型的?

总的来说,我知道有三种大型的设计模式

  1. 创作模式(工厂,单身等)
  2. 结构模式(复合,适配器,代理等)
  3. 行为模式(规范,命令等)

但我不知道我可以将Repository模式放入哪种类型.

存储库模式是否属于以上三种类型之一?或者它是在(2)和(3)模式的中间?

oop design-patterns repository repository-pattern

13
推荐指数
3
解决办法
3780
查看次数

如何使用cypress选择文本[cypress]

我正在寻找使用 Cypress测试像https://github.com/brijeshb42/medium-draft这样的文本编辑器。但是我找不到使用它选择文本的方法。有没有人知道如何做到这一点?

我必须选择一个特定的文本范围才能使测试有效。

javascript tdd integration-testing e2e-testing cypress

7
推荐指数
1
解决办法
5090
查看次数

检查用户名是否有效的API端点的最佳名称

我将设计一个RESTful API,它使用调用者提供的用户名来检查是否有任何错误(例如重复,无效字符或黑名单中列出的名称......).

API应将检查结果(有效或无效)返回给调用者,以便调用者知道他是否可以使用此用户名.

如何命名API端点?

我最初认为GET /checkUserName/{username}或者GET /isUserNameValid/{username}是我的API的好名字.但我不确定他们是否真的很好.而且我不知道如何方便别人接受我提出的名字.

GET是http方法.username是调用者提供的参数.

我读过以下两篇文章:

更好的休息api的10个最佳实践

RESTful API设计指南 - 最佳实践

但似乎我的API名称不符合上述文章中描述的所有指南.

其中一条指南说

使用名词但没有动词

遵循本指南,GET /checkUserName/{username}是不合适的.因为它包含动词check.

GET /isUserNameValid/{username}也不合适.因为is是一个动词.

那么,如果我必须遵循RESTful设计的指导方针,API的最佳名称是什么?

我想不出一个不包含动词的合适名字.

api rest naming-conventions restful-architecture

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