【问题标题】:how to make ruby on rails database api available for a data driven ios app [closed]如何使 ruby​​ on rails 数据库 api 可用于数据驱动的 ios 应用程序 [关闭]
【发布时间】:2012-11-27 22:00:47
【问题描述】:

嗯,我刚刚开始编码。我正在尝试使用从网站获取数据的基本图片信息制作一个 ios 社交应用程序(一些 flickr 克隆)

因此,主网站将基于 Ruby on rails 构建。

编辑:

好的,我想知道一个人何时上传图片,它将有以下条目: * 姓名 *谁拿走了 * 位置

我正在研究 gem logtrend (https://github.com/gorsuch/logtrend),我想知道我是否可以使用位置来制作各种趋势提要?

例如:用户选择一个标签,向他们显示趋势图片(靠近他们(基于他的核心位置)??我们可以做类似的事情吗?

【问题讨论】:

  • 当然是可以实现的,但 SO 并不是就如何建立这样一个网站获得意见的地方。
  • 我可以从哪里开始好先生?
  • ruby-toolbox.com 是寻找流行宝石的绝佳资源。 guides.rubyonrails.org 是开始学习 Rails 的绝佳资源。
  • 你应该观看这个关于在 IOS 中使用 Heroku 和 Core Data 的截屏视频mobile.heroku.com

标签: ios ruby-on-rails web-applications geolocation


【解决方案1】:

我对 Ruby on Rails 一无所知,但我知道做您想做的事情(让用户将带有姓名和 GPS 位置的照片上传到服务器,然后允许其他用户通过以下方式查看该照片)下载到他们的应用程序)。

构建服务器的一种方法是使用 Ruby on Rails 构建 Web 服务。

网络服务

网络服务(你的服务器)做了两件事:

1) 接受请求

2) 返回响应

通过网络服务,您接受 HTTP POST 或 GET 请求,然后您的服务器的逻辑代码将解析 POST 或 GET 中的“参数”或“变量”。

一旦您的服务器拥有这些变量,它就可以将它们保存到数据库中(ORM 确实会更容易)。

然后,您的网络服务可以使用 HTTP 状态代码JSON 格式的响应返回响应。

示例场景

1) iPhone 应用拍摄照片,然后使用 ASIHttpRequestAFNetworking 向您的 Ruby 服务器发出 HTTP POST 请求。

// ASIExample
-(void)uploadPhotoToServer
{
    NSURL *url = [NSURL urlWithString:myUploadWebServiceURL];

    __block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

    // ---------------------------------------------------------------
    // setting the POST parameters below
    // note: you will need to get the NSData from a UIImage object
    // ---------------------------------------------------------------
    [request setData:imageData withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" forKey:@"photo"];
    [request setPostValue:fldName.text forKey:@"name"];
    [request setPostValue:[NSNumber numberWithDouble:myLatitude] forKey:@"latitude"];
    [request setPostValue:[NSNumber numberWithDouble:myLongitude] forKey:@"longitude"];

    [request setCompletionBlock:^{
        int statusCode = [request responseStatusCode];

        if(statusCode == 200)
        {
            [self alertUploadComplete];
        }
    }];

    [request setFailBlock:^{
        NSLog(@"Server error: %@", [[request error] localizedDescription]);
        [self alertConnectionProblem];
    }];

    [request startAsynchronous];
}

2) 服务器接收请求,解析数据并返回响应

// Symfony Web Framework example (PHP based web framework)
public function uploadPhotoAction()
{
    // --------------------------------------------------
    // check to make sure all POST parameters are sent 
    // in the POST request by iPhone app.
    // --------------------------------------------------
    if(
        !isset($_REQUEST['name'] 
        || !isset($_REQUEST['latitude']
        || !isset($_REQUEST['longitude']
        || !isset($_REQUEST['photo']
    )
    {
        return new Response($this->sendResponse(406, 'Missing POST parameters');
    }
    else // assumes safe to continue
    {
        /* 
            write code to save the your name, latitude, longitude to your database here 
        */

        /* 
            save your photo to your server's dedicated photo folder, then store
            the file path to the file in your database entry in the above step
        */

        return new Response($this->sendResponse(200, 'Photo uploaded'));
    }
}

【讨论】:

    【解决方案2】:

    DeviseOmniAuth 可用于社交登录/身份验证。

    如需按类别查看更多宝石,请查看Ruby Toolbox

    希望你好运!

    【讨论】:

    • 哇,谢谢!我正在通过全方位身份验证。设计看起来也很棒。非常感谢!
    【解决方案3】:

    这可以通过 ruby​​ on rails 实现吗?

    是的,是的。

    我应该使用什么宝石?

    取决于您的方法和功能集。

    另外,哪些 gem 可以用来制作 API 来为 IOS 应用程序提供数据?

    我认为您误解了 API 是什么。 API 是客户端如何与主机交互的。

    我建议您调查使用 JSON 在您的 IOS 应用程序和您的 Web 应用程序之间进行通信。 IOS 和 Ruby/Rails 都对 JSON 的支持能力很强,而且相对轻量级。

    此外,您需要详细定义 IOS 应用程序在需要与 Web 应用程序交互的地方要做什么。

    示例

    • IOS App (IA) 会将图片保存到 Web App (WA)。
    • IA 可能会将同一张图片保存到 WA(覆盖)
    • 如果 WA 已满,IA 会收到通知
    • IA 将登录到 WA
    • IA 可以从 WA 注销
    • IA 可以在 WA 上更改密码
    • WA 将拒绝来自未登录 IA 的命令
    • IA 可以从 WA 中检索用户的图片
    • IA 可以从 WA 中检索任何其他用户的图片

    等等

    现在,您为每一个设计 API 以支持该功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-07
      • 2012-07-29
      • 2013-12-10
      • 2010-10-08
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多