我的公司即将从头开始重新设计一个大项目。我们目前正在考虑如何实现数据提供者。在过去的几个月里,我曾经集成一些 Web 服务,并且非常喜欢以这种方式处理数据。所以我在考虑一个 RESTful 设计。我们将使用带有 REST 支持的 ColdFusion 10,但我实际上不喜欢它所需的组件结构。
最大的优势可能是我们将能够使用 REST 为我们所有的平台提供数据,即:网站、移动网站和 iOS/Android 应用程序。我的安全方法如下:任何人都可以访问公共数据(显然)。只能使用 BasicAuth 访问私有数据。使用 BasicAuth 还允许我们拥有具有不同访问级别的用户角色。授权将是隐式的,并且基于会话/登录。
<!--- server-side example to request customer information (private data, BasicAuth required) --->
<cfset requestedID = 123>
<cfhttp url="/customer/#requestedID#" method="get" username="#APPLICATION.REST_SYSTEMUSER#" password="#APPLICATION.REST_SYSTEMUSER_PW#">
<cfhttpparam type="url" name="includeAddresses" value="true">
</cfhttp>
<!--- successful response in JSON --->
{
"ID": 123,
"FirstName": "John",
"LastName": "Doe",
"Birthday": "1970-01-01",
"BillingAddress": {
"Receiver": "John Doe",
"Street": {
"Name": "Main Street",
"Number": "13",
"Addition": ""
}
"City": {
"ZipCode": "AB-123",
"Name": "Sampletown",
"District": ""
}
},
"ShippingAddresses": [
]
}
<!--- deserialize JSON and build an object to use server-side (the constructor wraps the data and adds functions to it) --->
<cfset customerJSON = deserializeJSON(CFHTTP.FileContent)>
<cfset customer = createObject("component", "Customer").init(customerJSON)>
以下是我想到的问题:
- 对每个页面上的所有内容都使用这种通用的 REST 方法是否明智?(开始在网站上使用 REST 是否明智?)
- 本地 HTTP 请求会影响性能并减慢页面加载速度吗?
- BasicAuth 是否足以保护数据?(我只会添加一些次要的安全功能,例如请求垃圾邮件保护)
- 是否最好避免在 Web 服务中存在依赖关系,例如
/customer/
访问/address/
以接收其数据?
在其他一些(较旧的)网站上,我们有基于文件的数据提供程序(包括和负责数据库访问等的组件),但我们遇到了一些更复杂的页面(例如结帐过程)的问题,例如名称冲突通过包括,不透明和沉重的组件,混合模型/视图/控制器元素等。