【问题标题】:Django REST Framework API call using IOS使用 IOS 调用 Django REST Framework API
【发布时间】:2013-07-29 17:36:04
【问题描述】:

我已经构建了一个简单的 Django 应用程序,并使用 Django REST 框架公开了一些 API 端点。我现在正在使用基本身份验证。我已经在命令行上进行了测试,一切正常:

curl -H 'Accept: application/json; indent=4' -u myuser:mypass http://myapp.herokuapp.com/items/

我正在将 API 交给 IOS 开发人员。在 IOS 应用程序中调用以正确验证和传递 JSON 数据的正确参数是什么?我真的不熟悉 IOS 开发,所以我不知道如何处理这个问题。

【问题讨论】:

    标签: ios django api django-rest-framework


    【解决方案1】:

    当您使用“curl”并使用“-u myuser:mypass”时,您将在 HTTP 授权标头中发送用户名和密码。我不确定如何在 IOS 中专门执行此操作,但我会尝试使用类似以下网址的 POST 请求:http://username:password@example.com/

    【讨论】:

    • 是的,只需发布​​到 url。我建议将 MKNetworkKit 用于 ios 网络库。没有理由尝试自己编写。
    • @M1Reeder NSURLConnection 可以“几乎”自动处理基本身份验证 - 或者可以轻松地为相应委托方法中的应用程序需要进行定制。具有网络经验的开发人员应该能够做到这一点。由于 Web 服务是 REST,因此不能随意伪造 HTTP 方法。 POST 方法仅用于“创建资源”请求(用于更新的补丁)。使用 https 也是强制性的。
    【解决方案2】:

    只要给开发者API URL、用户名和密码,告诉他做基本的认证,他就会知道该怎么做。

    如果他不知道该怎么做,你可以给他指点这个帖子:NSURLConnection and Basic HTTP Authentication in iOS

    关于 JSON,我想你可以让 iOS 开发者在请求头中添加 'Accept: application/json;' 应该也可以。

    【讨论】:

      【解决方案3】:

      我们的 IOS 开发人员实际上使用了一个稍微不同的实现,为了完整起见,我发布了他的代码。

      ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
      [request setRequestMethod:@"GET"];
      [request addRequestHeader:@"Authorization" value:[NSString stringWithFornat:@"Basic %@",      [ASIHTTPRequest base64forData:[[NSString stringWithFormat:@"%@:%@",username,password] dataUsingEncoding:NSUTF8StringEncoding]]]];
      [request setDidFinishSelector:@selector(requestFinished:)];
      [request start];
      

      【讨论】:

      【解决方案4】:

      我通过这种方式解决了身份验证问题。

      let authStr:NSString = "username:password"
      let authData:NSData = authStr.dataUsingEncoding(NSASCIIStringEncoding)!
      let authValue:NSString = "Basic \(authData.base64EncodedStringWithOptions(.Encoding64CharacterLineLength))"
      request.setValue(authValue, forHTTPHeaderField: "Authorization")
      

      【讨论】:

        猜你喜欢
        • 2022-01-09
        • 2021-07-17
        • 1970-01-01
        • 2016-11-14
        • 1970-01-01
        • 2018-05-24
        • 1970-01-01
        • 1970-01-01
        • 2016-06-06
        相关资源
        最近更新 更多