这是一个非常笼统和开放主题的问题。所以昨天我们决定在我们的网站上创建一个iOS应用程序,目前正在使用Django构建。现在,Djang和RoR一样,假设对UI是透明的;它不应该关心用户使用的UI。 (适当的MVC)。
如果我查看一些代码,例如,我们将如何将设备添加到系统中:
@login_required
def add(request):
r_user = request.user.userprofile
form = EquipmentFormAdd(request.POST or None, c_id=r_user.company_id, error_class=DivErrorList)
if form.is_valid():
equipment = form.save(commit=False)
equipment.company_id = r_user.company_id
equipment.added_by_id = request.user.id
default_file_path = EquipmentPicture.get_default_file_path()
url_bucket = r_user.company.s3_bucket.name + default_file_path
cell = form.cleaned_data['cell']
equipment.cell_order = cell.equipment_set.count() + 1
equipment_picture = EquipmentPicture.objects.create(
file=EquipmentPicture.get_default_file_path(),
slug=EquipmentPicture.get_default_slug(),
bucket_name=r_user.company.s3_bucket.name,
bucket=r_user.company.s3_bucket, added_by=request.user,
company=r_user.company, url_with_bucket=url_bucket)
equipment.picture = equipment_picture
equipment.save()
return redirect('equipment_index')
return render(request, 'equipment/add.html', {'equipment_form': form, 'company_id': r_user.company_id})
如果我看一下这个,我看到我们正在直接渲染模板并传递数据。这在iOS中不起作用。
几个问题:
我看到很多人都在创建REST API。如果我们可以用Django创建HTTPResponses,我真的没有意识到这一点。如果我们使用像TastyPie这样的东西,我们将无法使用POST语句创建一个设备(就像我们现在所做的那样),就像你查看我们当前的添加功能一样东西是在那个函数内完成的,而TastyPie也无法调用它。
我的主要问题是我们是否应该运行REST API以及适用于Web和iOS平台的普通Django服务器,或者只是具有相同的功能,具有不同的入口点和渲染图它吗
您何时创建REST API?创建和获取数据时,我们的许多功能现在只能使用标准的POST和GET调用。那不好吗?
我有点困惑......对不起这个冗长的问题并再次感谢!
答案 0 :(得分:1)
REST API与GET和POST不同。它只是将它们用于数据而不是演示。您输出JSON或XML而不是标记代码。然后,API使用者构建数据所需的用户界面。
REST API的真正意义在于利用HTTP已经提供的所有工具,而不是发明另一层封装(如SOAP)
例如,要指示某些操作的结果(成功与否),请使用状态代码。要指示要执行的操作,通常使用动词(get,post,put,delete,head,options)。其他请求或响应元数据将进入适当的http标头。
这种方式数据更简单,缓存更容易,并且集成很容易。
此外,通过良好的REST API,您甚至可以构建一个使用一些JavaScript框架(例如backbonejs)的网站,以根据API消耗的数据构建UI。
<强>更新强>
因此,鉴于Django中REST事物的当前状态,并且有一些生成和使用API的经验,我会告诉你构建它们:
与您的网站一起使用RESTful API,如果可能,使用您用于网站的相同控制器。实际上,同一个Web实际上是RESTful,唯一的区别是它不是API。我曾尝试在一些项目中使用几个库来构建API,但总是最终为它生成我自己的代码。有时这样更容易。所有客户端应用程序(iOS,Android,等等)都将使用您的API,因此您可以完全解耦它。
如果您不自觉地构建所有API,那么piston可能是tastypie的有效替代品。
仅 RESTful API,并使用客户端技术重建您的网站。为什么让(少数)服务器忙于生成HTML,当你的(多个)客户/用户的浏览器可以做同样的工作并且你不支付电费时呢?
在任何情况下,RESTful API都可以帮助您更好地组织应用程序的数据结构。