设置Rails API后端

本文的初衷是提供有关设置我将在以后的文章中使用的Rails API的快速指南,但是我决定更深入地坚持我的目标,即为我提供更新的指南。那些没有经验的开发人员可能会觉得微不足道的开发人员。

尽管本指南将引导读者逐步创建Rails API,但它确实假定读者已经为编程环境安装了计算机。 这不是有关如何安装Ruby,Rails或Postgresql之类的指南。

要开始创建任何Rails应用程序,我们需要在终端中输入一些命令

 mkdir list-app 
cd list-app
栏杆新。 --api --database = postgresql

让我们分解这些命令

  mkdir list-app 

该命令告诉计算机创建一个名为list-app的新目录(mkdir)(这将是我的应用程序的名称,因此可以将其更改为所需的任何名称。

  cd list-app 

此命令告诉终端更改为新创建的目录,以便将来的命令将在正确的位置运行

 栏杆新。  --api --database = postgresql 

这是一个Rails命令,用于在当前目录中创建新的应用程序。 命令末尾包含的其他选项将创建Rails应用程序的API版本,还将数据库分配为postgresql而不是默认的mysql。 数据库中的更改很重要,因为它使将来部署到Heroku的步骤变得更加容易。

一旦Rails完成文件并安装其依赖的gem,这可能需要花费几分钟,我们需要告诉系统使用命令rake db:create创建一个本地数据库。

现在,通过运行命令rails s -p 3001启动本地服务器。 我们在端口3001而不是默认端口上运行Rails服务器,以避免在添加React组件时产生任何冲突。

如果您访问http:// localhost:3001并看到下图,则说明一切设置正确

恭喜你! 您已经成功创建了Rails API。 本文的其余部分将特定于我将在以后的文章中使用的应用程序,但是其背后的概念可以应用于任何应用程序。


下一步是取消注释应用程序的gemfile中的becrypt gem,然后在终端中运行bundle install。 这将使我们能够为用户密码提供安全性。 我们还需要重新激活Cookies才能使用该会话。 有4行需要添加到config / application.rb

链轮/轨道也需要在application.rb文件中取消注释

所以现在application.rb文件应该看起来像

通过Rails API设置,我们现在需要向应用程序中添加一些迁移,以创建数据库结构。 让我们从迁移User表开始。 在终端rails g migration CreateUsers输入以下命令。

这将在db/migrate文件夹中生成一个新文件。 该文件应该看起来像

现在我们需要添加将在我们的用户表中的列; 我将在表中添加一个用户名,电子邮件和密码列。 这导致文件看起来像

password_digest列是我们的Bcrypt gem的要求,否则可以使用一个简单的password列。 t.timestamps将创建两列,一列存储创建新记录时的日期和时间,另一列存储编辑记录时的日期和时间。

接下来,我们需要为列表创建迁移。 该表将具有标题,状态并属于用户。 我们的迁移文件应该看起来像

最后,我们需要为列表项表创建一个迁移。 该表将具有名称,数量,状态并属于列表。 我们的迁移文件应该看起来像

准备好迁移文件后,在进行下一步之前,还有最后一件事要做。 运行以下命令rake db:migrate将指示Rails运行迁移文件并在数据库中创建表和列。


创建Rails API的下一步是设置模型,我们将从用户模型开始。 导航到模型文件夹,该文件夹嵌套在目录根目录中的app文件夹下。 在模型文件夹中,我们需要创建一个user.rb文件来容纳我们的用户模型。 为了使Rails发挥其魔力,每个模型文件将需要包含相同名称的类。 用户模型文件应如下所示

第3行告诉Rails除非提供用户名和电子邮件,否则不要创建新用户。 第4行告诉Rails在创建新用户之前确保提供的用户名和电子邮件是唯一的。 第5行由bcrypt gem提供,并将对用户提供的密码进行编码,因此不会以纯字符串形式存储在数据库中。 如果数据库遭到黑客入侵,这一点很重要; 否则,黑客将可以轻松访问用户的电子邮件和密码,并且大多数人会在许多站点上重复使用相同的密码。 第6行告知Rails,用户模型和列表模型之间存在关系,并且每个用户可以有许多列表。

我们将在与创建用户模型时相同的文件夹中并遵循相同的约定来设置List和ListItem模型。 这是list.rb文件的外观

和list_item.rb文件


通过所有模型的设置,我们将着手于制作控制器,以便拥有CRUD功能。 我们需要为每个模型创建一个控制器,但User模型的处理方式略有不同; 这些文件必须位于嵌套在app文件夹中的controller文件夹中,以使Rails magic成功。 用户模型将具有两个控制器,一个用于处理用户登录和注销的会话控制器,另一个用于处理用户注册和帐户删除的注册控制器。 在此示例中,“会话和注册”控制器将保持简单,因为最终结果应用程序仅允许用户注册,登录和注销。 这是会话控制器的外观

和注册控制器

因为我们的Rails后端处于API模式,所以我们需要让控制器呈现json而不是HTML。

需要对ApplicationController进行一些修改。 由于我们使用会话在登录时存储user_id,因此我们需要添加一种方法来访问所有控制器中的当前用户。 由于我们所有的控制器都继承自ApplicationController,因此是容纳此方法的理想位置。 ApplicationController文件现在应该看起来像

使用我们的方法来检查当前用户,我们无法设置列表控制器。 我们希望用户能够查看其所有列表,查看特定列表,创建新列表,更新列表以及删除列表。 除非列表属于他们,否则我们也不希望用户能够执行任何这些操作,因此我们需要在执行操作之前检查当前用户ID与参数中提供的用户ID。 这导致列表控制器看起来像

除了将动作限制为“创建”,“更新”和“删除”之外,我们需要对“列表项”控制器遵循类似的逻辑。 这是我们的清单项目控制器


通过Controllers设置,我们需要添加序列化器,以简化通过JSON响应进行的解析。 首先将gem’active_model_serializers’添加到Gemfile中,然后运行命令捆绑安装。 现在我们需要为每个模型添加一个序列化器文件,这些文件需要位于app / serializers中。 需要设置每个序列化程序以传递相应模型的所需属性,以及在检索JSON响应时需要访问的任何关系。 这是三个序列化器文件


通过迁移,模型,控制器和序列化器的设置,最后一步是构建路由,以便我们的后端知道如何引导流量以及在查询时提供哪些信息。 惯例是将API的路由嵌套在'/api' ,我们也不想创建导致死胡同的路由,因此我们需要确保限制每种模型可用的路由,并且需要登录,注销和注册的路线。 牢记这些准则,这是route.rb文件的外观


如果您已经关注了本文,请花点时间庆祝一下,因为本文涵盖了很多内容。 如果您一直在编码,那么将有一个可用的Rails API,可用于创建列表跟踪应用程序。 在以后的文章中,我将使用React构建前端来扩展此API。 请在评论中提出任何问题,我将尽快答复。