我们有一个网站,登录和验证自己的网站的唯一方法是使用Facebook(这不是我的选择).第一次使用Facebook登录时,会自动为您创建一个帐户.
我们现在想为我们的网站创建一个iPhone应用程序,也为其他人创建一个公共API来使用我们的服务.
这个问题是关于如何通过app/API对我们的网站进行身份验证,并分为两部分:
从API到仅使用Facebook OAuth作为身份验证方法的网站处理REST身份验证的正确方法是什么?
我已经阅读并研究了很多关于REST API的标准身份验证方法.我们不能通过HTTPS使用Basic Auth等方法,因为没有用户凭证.像这样的东西似乎只是用于使用API验证应用程序.
目前,我认为最好的方法是在API上点击/授权终点,重定向到Facebook OAuth,然后重定向回站点并提供API的用户可以用来验证后续的"令牌"要求.
对于我们创建的官方应用程序,我们不一定需要以相同的方式使用公共API.那么与我们的网站交流并对用户进行身份验证的最佳方式是什么?
我理解(我认为)如何使用API(公共)密钥和秘密(私有)密钥验证使用我们的API的第三方应用程序.但是,当涉及到对正在使用该应用程序的用户进行身份验证时,我对如何进行此操作感到困惑,因为我们必须对用户进行身份验证的唯一方法是Facebook.
我觉得我错过了一些非常明显的东西,或者没有完全理解公共REST API应该如何工作,所以任何建议和帮助将不胜感激.
我一直在阅读很多关于测试驱动开发的内容,并决定我想在一个小项目上试一试.作为参考,我目前正在阅读"以测试为导向的面向对象的软件".
我理解如何对我的应用程序进行单元测试以及如何对UI的某些部分进行单元测试,但我正在努力设置端到端测试.例如,测试通过我的整个应用程序的某个路径产生正确的输出(这是我对端到端测试的基本理解).
没有必要模拟点击事件,但有必要与UI建立某种连接.
我是正确的思维,我需要"逻辑"的测试组合(测试,而无需启动应用程序),"应用程序"测试(与启动应用程序测试)和类似GHUnit异步功能来做到这一点?
编辑:
在阅读了下面的一些答案后,听起来我正在寻找功能性的端到端测试,但我想我应该举一个测试的例子,就像我想象的那样.
KIF听起来像它可以工作,因为它有检查UI元素的变化的步骤,看起来也有一个Mac OSX分支.我敢肯定我还可以编写一个小类,它会不断地在UI中调查我期望的更改并在一段时间后超时,但我想知道这是否是正确的方法.
但是,也许我正在尝试将我正在阅读的"面向对象的软件增长,以测试为导向"并尝试将其应用于Cocoa.
另一个更新:
所以到目前为止我一直在阅读这些建议,检查链接到的各个地方,并开始实现某些内容,同时仍然参考了这本书.我认为我真正想要的是Test- Driven -Development部分.在这本书中最突出的是,他们首先通过验收测试从用户角度描述了他们想要发生的事情.
我意识到,一旦开始编写方法,就必须进行可靠的单元测试,但我很想首先使用一些UI来编写一些高级验收测试.我已经开始编写自己的应用程序"驱动程序"类,使用一些类似于GHAsyncTestCase想法的方法来帮助我实现这一目标.这听起来是否正确/有用/必要?
到目前为止,我非常感谢所有的评论,他们肯定帮助我在自己的脑海中解决了我正在尝试做的事情以及各种测试领域.我很快就会完成这个问题,因为它变得越来越大,所以欢迎任何最终的建议!
我在Ruby on Rails中编写了这个控制器代码
class PostsController < ApplicationController
before_filter :authenticate_user!
def index
@posts = Post.all(:order => "created_at DESC")
respond_to do |format|
format.html
end
end
def create
@post = Post.create(:message => params[:message])
respond_to do |format|
if @post.save
format.html { redirect_to posts_path }
format.js
else
flash[:notice] = "Message failed to save."
format.html { redirect_to posts_path }
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
并对应于此我写了以下测试用例: -
require 'spec_helper'
describe PostsController do
describe "GET 'index'" do
it "returns http success" do
get 'index'
response.should be_success
end
end
describe …Run Code Online (Sandbox Code Playgroud)