我试图构建一个Web应用程序,其中后端是一个完整的REST风格的Web服务。即模型(业务逻辑)将通过HTTP完全访问。例如:复杂动作(动词)的REST风格的Web服务
GET /api/users/
GET /api/users/1
POST /api/users
PUT /api/users/1
DELETE /api/users/1
提供更多非CRUD(动词/动作)方法的正确方法是什么?这是否被视为更多的RPC-api域?如何正确设计RPC API以在RESTful API上运行?
例如,我将如何优雅地为用户实现一个忘记的密码方法。
POST (?) /api/users/1/forgot
应用程序(控制器/视图)然后使用HTTPS请求(HMVC等)来访问模型和方法。什么是最好的认证? OAuth,基于HTTP的基本身份验证?
尽管这对于后来的可伸缩性来说是“最佳实践”,但我是否在完成这项任务?遵循典型的MVC模型并提供非常基本的API最好吗?
这个问题已经通过ASP.NET的MVC 4(的WebAPI)和模块的NodeJS大多了启发提前https://github.com/marak/webservice.js
感谢
感谢您的回复安德斯。你认为最好是使用典型的MVC方法构建我的应用程序(模型直接与数据库通信),然后担心后续制作api.mysite.com?然后将模型修改为直接与api通信而不是数据库。将模型抽象出来可能是理想的,这样在模型中不会处理会话/认证,是正确的吗? – user1236971
@ user1236971我不是专家,但我看到它的方式:单独开发模型听起来有点像矛盾。您的模型应该以结构化的方式提供数据,尽可能多地隐藏底层实现。它还应该处理一些基本的安全措施,并隐藏不应该暴露的内容。例如,您应该能够更改或验证密码,但不会检索它(即使是散列)。这或多或少正是API应该做的,而且你不应该复制你的代码。您的模型*是*您的API,尽管您可能会跳过JSON转换。 –
@ user1236971噢,顺便说一下,我不确定你抽象模型的意思,以便它们不处理认证。你打算怎么做?我会试着实现这个模型,以便视图或控制器中的错误永远不会破坏数据,这可能涉及到执行一些权限检查。但正如我所说的,会话管理非常棘手,我不知道最佳实践。我遇到同样的问题。 –