【问题标题】:Adding parameters to rest GET request为rest GET请求添加参数
【发布时间】:2024-01-22 08:48:01
【问题描述】:

我有一个使用 AS2/PHP 运行的应用程序。 AS2 通过 $_POST 数据数组与 PHP 脚本通信,该数组包含 sessionkey、userID 和一些数据库过滤(sql 限制、order by 等)等数据

该应用程序的 iOS 版本正在计划中,我正在尝试找出使用现有服务器端代码并​​仅重写图形的最佳方法。

问题是我需要大量数据,理想情况下应该通过 $_POST 数组将数据发送到 GET http 请求中(对不起,如果我不清楚,请随时问我问题)。

我已经阅读了这篇 Understanding REST: Verbs, error codes, and authentication 的帖子,它让我更好地理解了 REST 应该如何工作,但我需要将更多数据发送到服务器。

例如,假设我想检索一个项目的集合,请求会是这样的:

GET http://xxx/rest/item

但是我如何告诉服务器我只想从集合中检索 X 个元素,甚至我想要哪种排序顺序?

感谢您之前的回答

编辑: @laurent,这里是接收到的脚本 POST 参数示例:

    // COMMON PARAMETERS (each script)
$idPROF     = Utils_Mv::getVariablePOST('idPROF');
$idVISITE   = Utils_Mv::getVariablePOST('idVISITE');
$typeConnexion  = Utils_Mv::getVariablePOST('typeConnexion');
$typeSupport    = Utils_Mv::getVariablePOST('typeSupport');
$cleSession     = Utils_Mv::getVariablePOST('cleSession');
$idCLIENT   = Utils_Mv::getVariablePOST('idCLIENT');
$idCONTEXTE = Utils_Mv::getVariablePOST('idCONTEXTE');

    // SCRIPT-SPECIFIC PARAMETERS
$idSUIVI        = (int) Utils_Mv::getVariablePOST('idSUIVI');
$nbPrescription = (int) Utils_Mv::getVariablePOST('nbPrescription');
$indiceDebut    = (int) Utils_Mv::getVariablePOST('indiceDebut');
$critereTri     = Utils_Mv::getVariablePOST('critereTri');
$isTriInverse   = Utils_Mv::boolval(Utils_Mv::getVariablePOST('isTriInverse'));
$chaineFiltres  = Utils_Mv::getVariablePOST('chaineFiltres');

您会在 GET 请求中将公共参数作为获取参数传递吗? (以及 PUT/POST 的 POST)

【问题讨论】:

    标签: rest post get


    【解决方案1】:

    要获得不止一件物品,我会这样做:

    GET http://example.com/items/1_2_3_4
    

    其中 1、2、3、4 是项目 ID。要只获得一件物品,您可以:

    GET http://example.com/items/1
    

    对于排序顺序,我会将其设为查询参数。通常,一个 REST URL 应该指向一个资源或多个资源。任何额外的东西,比如排序顺序、资源格式等都应该是一个查询参数:

    GET http://example.com/items/1_2_3?order=by_name
    

    【讨论】:

    • 那么“凭证”数据呢?例如会话密钥、客户端 ID 或请求所需但不直接过滤结果的任何其他数据?
    • @Kitensei,会话密钥也应该是一个查询参数,因为它可能对 GET 和 POST 请求都是必需的。不确定客户端 ID - 您不能从会话密钥中派生它吗?如果不是,它也应该是一个查询参数。
    • 我已经编辑了我的问题以显示我用来发送/接收的参数,该应用程序已经很大并且不是我开发的,所以我做的修改越少越好。
    • 显然我不了解您的系统,但大概所有 POST 变量都代表一个资源,因此它们应该保留为 POST 数据。其他一切,critreTri、triInverse 等,无论有多少(尽管您应该尝试使用合理的默认值来减少它们)都应该始终是查询参数。