Laravel REST API 类型保留(例如,如何防止整数作为字符串发送)

Posted

技术标签:

【中文标题】Laravel REST API 类型保留(例如,如何防止整数作为字符串发送)【英文标题】:Laravel REST API Type Preservation (Ex. how to prevent ints being sent as strings) 【发布时间】:2013-06-06 11:53:46 【问题描述】:

This tutorial 展示了如何使用 Laravel 4 创建一个基本的基于 JSON 的 REST API。在文章的最后,他们展示了 REST API 的输出:


    "error": false,
    "urls": [
        
            "created_at": "2013-02-01 02:44:34",
            "description": "I feel for him",
            "id": "3",
            "updated_at": "2013-02-02 18:44:18",
            "url": "http://yahoo.com",
            "user_id": "1"
        
    ]

这里的问题是 user_idid 被解释为字符串,而不是整数发送,尽管 INTEGER 的数据库类型被应用于这些值所在的列来自。

虽然 php 可以很好地处理类型转换,但将使用我们构建的 REST API 的其他语言对类型很挑剔,强制客户端对来自 API 的所有数据进行类型转换以匹配是没有意义的它在数据库中的表示方式。

如何在服务器上保存数据库的数据类型,让客户端不必做保存工作。

理想情况下,有一个解决方案,您不必遍历服务器上的结果并在那里进行显式类型转换。我希望能够在值从数据库中出来时保留它们,因此 CPU 周期不会浪费在转换上。

注意:我们将在构建 API 时使用 MySQL,以防万一会改变任何答案。

【问题讨论】:

你是如何输出 json 的? 这一切都在第一句话中链接的示例中。如果你看那里,它会说:return Response::json(array( 'error' => false, 'urls' => $url->toArray()), 200 ); 也看看这个:***.com/questions/1197005/… - 问题不是 Laravel,而是你的 mysql 驱动程序 【参考方案1】:

我阅读了Nettuts+ 上的教程,但我无法重现 API 生成的输出。 使用模型 Model::toArray() 方法从数据库返回数据时,ID 字段始终以整数形式返回。

另一种返回数据的方法(假设不需要额外的数据)是简单地返回模型本身。示例:

Route::get('users', function () 
    return User::all(); // returns JSON containing all users
)

当 L4 仍处于测试状态时,将数字作为字符串返回可能是个问题。

这是另一个关于使用 L4 进行 API 设计的不错的教程。也许http://laracasts.com/video/simple-api-development-with-laravel

【讨论】:

这取决于你的 php 版本。到目前为止,这仍然是 laravel 4.0.6 中的一个问题。

以上是关于Laravel REST API 类型保留(例如,如何防止整数作为字符串发送)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 7 - 使用 REST API 而不是数据库

在rest api app中生成laravel请求验证的最佳实践

如何使用具有相同控制器的 Laravel 制作网站和 API REST?

php 使用Passport进行Laravel REST API身份验证:https://www.cloudways.com/blog/rest-api-laravel-passport-authen

Laravel 5 REST API

简单的 Laravel 5 REST API