- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在为我的网络应用程序设计一个 API,我们的内容相当复杂。例如,您可以拥有一个包含多个子对象(如标签)、多个单独的内容区域等的 wiki 页面。
我不想处理复杂、笨拙的参数命名方式,例如 tag_N 或 tag[]。
我还想到,我们的对象可以用 JSON 来完美表达。事实上,这就是我们的响应格式。如果执行 GET,您将收到 JSON 格式的对象。
要求在 JSON 中也指定对象的 POST 和 PUT 主体是否合理?例如,像这样:
{
'name' : 'My Page',
'body' : 'Some page body',
'tags' : ['tag1', 'tag2', 'tag3']
}
相对于
name=My%20Page&body=Some%20page%20body&tag[]=tag1&tag[]=tag2&tag[]=tag3
这是一个非常简单的例子。在许多情况下,我们有带有子对象数组的复杂对象,这些子对象本身也包含子对象。使用 JSON 进行描述相当简单,但使用查询字符串样式参数会变得非常困难。
所以,主要问题是:如果我们要求POST body是一个JSON字符串,这不合理吗?它是否超出了 HTTP API 的规范?作为 API 使用者的作者,您会被具有这样要求的 API 吓跑吗?
最佳答案
这不无道理。您可能会在这里混合一些东西:(a) 数据格式,(b) 编码,以及 (c) REST 设计理念。
一般来说,我会建议如下:
数据格式应保持一致(例如,JSON 作为资源上所有 CRUD 方法的基础;如果您也支持 XML 就更好了,因为它无处不在——许多框架会自动为您执行此操作)
编码应该和数据传输格式分开;例如,URL 的编码与正文编码略有不同。不要将它与数据格式混淆。
建议您尽可能将资源建模为 REST-ful。大多数情况下使用 POST 创建、GET 读取、PUT 更新和 DELETE 删除
关于http - 使用 JSON 作为 API 请求参数的格式(为我的网络应用程序设计 API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663085/
如何有效地设计一个C++模块化程序?如何学习? 最佳答案 对于初学者,您可能希望采取“暴力”过程: 1. 在一个文件中写一个简单的main函数。 2. 增加一些功能,先编译再测试。 3.重构(在谷歌中
前言 有人说现在记事类app这么多,市场这么卷,为什么还想做一个笔记类App? 一来,去年小孩刚出生,需要一个可以记录喂奶时间的app,发现市面上没有一款app能够在两步内简单记录一个时间,可能i
我正处于 Web 应用程序的设计阶段,该应用程序允许用户创建工作请求,并且工作人员可以针对这些请求投入时间。该应用程序还将为主管提供报告功能,以获取每日总计、报告,并说明花费的时间、“成本分配”。 我
前言:很多刚刚接触编程的人都不知道怎么下手编写程序,特别是学习了新的知识点,不知道有什么用,那么本文将以简单的存储结构及简单的运算,条件语句,分支语句,循环语句结合,带来一个双人对战版五子棋,这是一
我正在尝试通过 C++ 多线程解决网络流量问题。 给定一个网络(所有节点都由弧连接,每个弧连接2个且只有2个结束节点,一个是输入节点,另一个是输出节点,每个节点可以有多个输入弧和输出弧),每个节点需要
我有一个关于编程和文件的问题。 while(current!=NULL) { if(current->Id_Doctor!='\0') { current=current->next;
下面的‘C’语句执行什么操作? star = star ^ 0b00100100; (A) 切换变星的第 2 位和第 5 位。 (B) 清除变量星的第 2 位和第 5 位以外的所有位。 (C) 设置除
我写了下面的代码: #include int main() { int a, b; printf("Enter values of a and b\n"); scanf(" %d%d "
我正在将 C 代码编程到 PIC 板上。我的问题是如何让我的程序计算按下按钮(RB0)的时间。然后它会显示所花费的时间并将其显示在液晶显示屏上。以毫秒为单位计算。下面是到目前为止我的代码。 /
我是一名优秀的程序员,十分优秀!