首页 > 解决方案 > 在不暴露实体主键的情况下从 REST API 发送和接收 json 数据的好做法是什么?

问题描述

我目前正在使用 laravel 框架。

这是我的场景:假设我有三个实体 POLICY、USER、BENEFICIARY。

关系:用户有许多受益人,政策。POLICY 属于 USER。BENEFICIARY 属于 USER

现在,当用户选择查看/更新政策信息时,我必须发送(JSON 数据到前端)政策信息、用户信息以及受益人信息,用户可以选择更新这些数据。

首先,我使用 policy_id 获取策略并预先加载 User 和 User.beneficiaries 并格式化所有数据并返回 JSON。

显示有关政策、用户和受益人的所有信息的端点 - GET /api/v1/policy/{policy_id}

用户信息更新端点是 -- PATCH /api/v1/policy/{policy_id}/user-info

受益人信息更新端点 -- PATCH /api/v1/policy/{policy_id}/beneficiary-info

要更新用户信息,很简单。我有 policy_id 应要求提供,我可以使用 eloquent 关系来更新用户信息,如下所示:

 $policy->user->update($postData)

但是在受益人的情况下,用户可以有很多受益人。假设用户有 2 个受益人,我发送了这些受益人的 JSON 数据。作为回报,我将受益人的发布数据更新为

{
    {
        "first_name": "Tassy",
        "middle_name": "Prasad",
        "last_name": "Villis",
        "relation": "Mother",
        "dob": "08/01/1942",
    },
    {
        "first_name": "Pradeep",
        "middle_name": "",
        "last_name": "Villis",
        "relation": "Brother",
        "dob": "11/03/1938",
    }
 }

一种方法是遍历这些数据并更新它

foreach($request->validated() as $key => $data){
    $policy->user->beneficiaries[$key]->update($data)
}

但这可能也不应该是正确的方法。

如何更新收款人信息?我应该将各自的 beneficiary_id 发送到前端吗?如果是这样,如果我没有用 post 数据取回那些 beneficiary_id 怎么办?像这样的东西-

   {
        "34657": {
            "first_name": "Tassy",
            "middle_name": "Prasad",
            "last_name": "Villis",
            "relation": "Mother",
            "dob": "08/01/1942",
        },
        "34658": {
            "first_name": "Pradeep",
            "middle_name": "",
            "last_name": "Villis",
            "relation": "Brother",
            "dob": "11/03/1938",
        }
    }

希望这些 id 将与 post 数据一起出现,或者前端开发人员会以这种模式(以 id 作为键)将我发送回来?

或者我应该更改暴露主键的端点?

PS:这是一个laravel框架。因此,如果有任何诡计。

标签: laraveleloquentresteloquent-relationship

解决方案


推荐阅读