【问题标题】:laravel route parameters with post routes vs post parameterslaravel 路由参数与 post 路由与 post 参数
【发布时间】:2018-04-05 12:08:22
【问题描述】:

路由参数是否应该只用于获取/删除请求? 用户可以加入挑战,我希望有一个 API 端点。

这样可以吗:

Route::post('/challenge/{challenge}/join', 'UserController@joinChallenge');

还是我应该在帖子正文中传递挑战 ID?

【问题讨论】:

  • 你的“挑战”是什么?是公共字符串吗?
  • 挑战是一个 uuid
  • 让它成为一个蛞蝓(友好的网址),请参阅下面的答案
  • 用户看不到或者不需要SEO检查也没关系。
  • 您将看到是否可以看到挑战 uuid,如果可以将其公开给人们,然后使用 URL parapeter,否则使用表单中的隐藏字段!

标签: php laravel


【解决方案1】:

POST 是一个完美的解决方案: “良好的 Web 设计”需要通过 POST 发送非幂等操作。这是一个非幂等的动作(它有副作用,它会修改 DB 的状态)。

服务器日志不记录 POST 参数,但它们记录 url。在您的场景中使用该设计更容易通过日志查看某些内容。

幂等: http://www.restapitutorial.com/lessons/idempotency.html

【讨论】:

    【解决方案2】:

    没关系

    更好的方法:

    Route::post('/challenge/{challengeId}', 'UserController@joinChallenge');
    

    别忘了在你的控制器中捕获 id

    function joinChallenge(Request $request, $challangeId)

    请看下面的参考

    What are the best/common RESTful url verbs and actions?

    【讨论】:

      【解决方案3】:

      你可以在你的 url 中传递参数,但你需要通过你的方法接受这个参数 joinChallenge(Request $request, $challenge)

      【讨论】:

        猜你喜欢
        • 2018-10-01
        • 2019-06-27
        • 2019-04-13
        • 2016-03-05
        • 1970-01-01
        • 2021-02-04
        • 2011-06-21
        • 1970-01-01
        • 2018-07-11
        相关资源
        最近更新 更多