是否存在用于从API构造JSON响应的标准或最佳实践?显然,每个应用程序的数据都是不同的,所以我不关心,而是"响应样板",如果你愿意的话.我的意思的一个例子:
成功要求:
{
"success": true,
"payload": {
/* Application-specific data would go here. */
}
}
Run Code Online (Sandbox Code Playgroud)
请求失败:
{
"success": false,
"payload": {
/* Application-specific data would go here. */
},
"error": {
"code": 123,
"message": "An error occurred!"
}
}
Run Code Online (Sandbox Code Playgroud) CORS真的让我发疯,我真的没有想法让它变得有用.
我创建了一个简单的APIG Api,其中包含1个名为'abc'的资源,并添加了2个方法GET和POST,其中Authorization设置为NONE,API Key Required设置为false,所有内容都部署到名为'dev'的阶段.
当然,我在两种方法上都启用了CORS,我看到在OPTIONS方法和Access-Control-Allow-中添加了3个标题Access-Control-Allow-Origin,Access-Control-Allow-Headers和Access-Control-Allow-Methods Origin添加到POST和GET方法中.
两个调用都映射到相同的lambda函数,该函数只是将"Hello from Lambda"文本输出到控制台.
然后我创建了一个简单的html页面,我在S3上作为静态网站托管,使用Route53指向一个域,并开始使用jQuery $ .ajax测试API 来进行调用.
一切看起来都很简单,直截了当,正如文档中所解释的那样,除了GET工作并按预期将文本输出到控制台.该POST版本导致以下错误:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://example.com' is therefore not allowed access. The response had HTTP status code …
我是Amazon Lambda-API实现的初学者。
我只是在部署一个非常简单的API:一个非常简单的lambda函数,使用Python 2.7打印我用API Gateway触发的“ Hello World”。但是,当我单击“调用URL”链接时,它告诉我“ {” message”:“内部服务器错误”} “。
因此,我试图查看这里出了什么问题,所以我单击了API本身,然后在“方法执行”中看到以下灰色:“ 集成响应:无法配置代理集成来转换响应。 ”
我测试了许多不同的配置,但仍然遇到相同的错误。我不知道为什么这一步是灰色的。
我偶然发现了一种我发现非常普遍的做法.我甚至找到了一个给这个名字命名的网页,但我忘了这个名字,而且我再也找不到谷歌那个页面了.
实践是来自REST服务的每个JSON响应都应具有以下结构:
{
"status": "ok",
"data": { ... }
}
Run Code Online (Sandbox Code Playgroud)
或者在错误的情况下:
{
"status": "error",
"message": "Something went wrong"
}
Run Code Online (Sandbox Code Playgroud)
我的问题:为什么在JSON中需要这样的"状态"属性是什么意思?在我看来,这是为HTTP状态代码制作的.
REST使用客户端和服务器之间的HTTP通信方式,例如,应使用"DELETE"动词进行删除.同样,如果找不到资源,则应使用404等.因此,如果符合这种思路,任何错误情况都应在HTTP状态中正确编码.
是否有特定原因在错误情况下返回HTTP 200状态代码并在JSON中出现错误?它似乎只是在处理响应时使javascript条件分支更复杂.
我发现了一些状态可以"重定向"以告诉应用程序重定向到某个URL的情况.但是如果使用了正确的HTTP状态代码,浏览器将"免费"执行重定向,从而正确维护浏览历史记录.
我想主要提出两个可能的答案: