我有一个现有的RoR Web应用程序,它目前使用Devise进行身份验证。
我打算以某种方式为移动后端添加API功能。
您是否建议将API功能添加到Web应用程序并使用JWT,例如,启用移动身份验证。或者,您是否有两个单独的应用程序,一个Web应用程序和一个API,在Heroku上共享相同的Postgres实例?
我看到了两种方式的优点和缺点,但在我看来,将它分成两个应用程序将超过向Web应用程序添加API功能。也许,重新开始只使用API并添加移动应用客户端和Web应用程序客户端功能是最有意义的。
首先创建一个新的API后端可能会更容易,但您必须复制模型中的所有应用程序逻辑并保持双方最新将是一个痛苦。如果您命名新API以便所有调用都在/api_v1
或类似的东西下,您可以在相同的rails应用程序中执行此操作。 Here是一篇文章,展示了如何使用不同版本的API。
用于身份验证的JWT是一种很好的方式,并且Devise可以通过添加像devise-jwt这样的gem来支持它们,因为添加路由并自己处理令牌的创建和更新是很多工作。
对于API本身,您可能需要考虑将JSON:API与jsonapi-rails gem或GraphQL与graphql gem一起使用。这样,当有人想要使用你的API时,他们可以使用适配器作为他们的框架,可以与那种API交谈,而不必担心它返回的结构。这两个API都有适配器,可以使用Andrioid,IOS,Ember,React和所有其他主要的前端框架。