使用与移动设备相同的 API 开发网站

Posted

技术标签:

【中文标题】使用与移动设备相同的 API 开发网站【英文标题】:Developing websites with same API as mobile 【发布时间】:2013-04-05 21:10:00 【问题描述】:

我只熟悉原生移动开发,不熟悉 Web 开发,请原谅我的幼稚。

移动应用的 API 通常涉及通过 API 的 POST 或 GET 数据请求。数据将作为 JSON 返回。就本示例而言,假设 API 是一个由 Sinatra / Ruby 提供支持的简单 API,它将被移动设备和网站使用。

使用相同范例的网站开发有哪些选项 - 网络前端从与移动应用程序相同的 JSON 端点获取数据?

我听说过 AngularJS 和 Backbone.js 的名字,但也许 Sinatra 就足够了?我宁愿不使用 php

我更喜欢轻量级的解决方案。如果可能的话,我希望它能够在模型更改时更新页面,尽管我猜这将取决于后端 API 的更改。

【问题讨论】:

我对 Web 开发也不是很熟悉,但如果我理解您的正确,您希望在您的网站(前端 -> 后端)中以移动方式使用相同的 API 通信应用程序是通过 JSON 来实现的,对吧?如果这是正确的,我认为这不是您得到的最佳选择,因为移动应用程序使用 JSON 从网络服务器的数据库中获取数据,并且您已经在后端与您的数据库建立了连接。所以网站不需要任何 JSON API我猜。它只需要使用 mysql 来获取您需要的数据。如果我理解错了,请纠正我。 我没有时间回答,但为了缓解一个问题:如果您已经拥有可通过 HTTP 访问的现有 JSON API,则不必使用 PHP。您可以使用 html 和 Knockout 轻松构建一个体面的单页应用程序。 【参考方案1】:

如果您的服务和 UI 层完全分开,您将获得最大的收益。我的意思是,在设计服务时不要考虑特定的 UI,因为这样做可以最大限度地重用它们。我会推荐一个基于 Web 的 RESTful 服务实现,因为它们为 UI 集成提供了很大的灵活性。现在确实有大量图书馆能够使用来自此类服务的数据。

我不是 Ruby 开发人员,但这里有一个 Sinatra 中的简单 Web 服务实现:

require 'rubygems'
require 'sinatra'
require 'lib/posts'

post '/posts'
    post = Post.create! params
    redirect "/posts/#post.id"
do

get 'posts/:id' do
    @post = Post.find(params[:id])
    erb :post
end

署名:Lightweight Webservices with Sinatra and RESTClient

请注意,服务实现所使用的实际语言/平台无关紧要,只要其 RESTful 并返回客户端可以轻松使用的数据即可。完成设置后,设计 Web 应用程序与移动应用程序就变成了选择合适的集成库的问题:

HTML(5)/CSS/Javascript。更强大的选项之一,因为它可用于实现移动和 Web 应用程序。上述三项技术构成了新 Web 2.0 架构的核心,并且存在各种框架:Angular.js、Ext.js、Backbone.js、Knockout.js,甚至还有jQuery Mobile 或Bootstrap。这是目前最常用的将 Web 服务 API 与 Web 应用程序集成的方式。请注意,在某些情况下,您甚至可以只设计一个网站,然后将其用作移动应用的基础(例如通过 ios UIWebView/android WebView)。 中间层代理:如果您想在浏览器中取消 Ajax(出于安全目的,或避免 XSS 问题),您将采用此方法。代理可以用任何语言(Java、PHP、Ruby、Perl)编写,并负责使用您的 Web 服务并为您的 UI 生成动态 HTML。

作为一个真实的例子,我当前的项目有大量使用 Java EE/JAX-RS 构建的 RESTFul Web 服务,这些服务在集群 JBoss 服务器上运行。服务默认返回 JSON,但也可以生成 XML,并通过以下方式访问:

使用 Ext.js 构建的各种内部和外部 Web 应用程序 使用 AFNetworking/RestKit/NSURLConnection 组合的 iOS 应用程序 Android 应用程序使用Jersey REST Client

完全相同的服务被多个不同的平台/UI 使用,无需在服务端进行任何更改。这就是我相信您正在努力实现的目标。

【讨论】:

【参考方案2】:

一个选项,由于您熟悉本地开发,我假设您对 java 没问题,那么我建议您使用 DropWizard 进行 API 开发,它将通过 RESTful 端点提供 JSON。

该网站与您在移动应用程序中执行的过程完全相同,只是您使用 Web 开发语言进行编码。

向 API 发送请求。 获取 JSON 响应。 将 JSON 解析为对象。 使用 HTML、CSS 等创建对象的 UI 表示。 显示 UI 表示。

您需要做的就是决定要使用哪种语言来进行 POST/GET - PHP、Ajax 或您选择的其他语言。

【讨论】:

谢谢,我去看看,虽然我更喜欢 iOS。我的 java 生锈了。【参考方案3】:

根据我的经验,当我开发一个多平台应用程序时,我会尽量使我的代码和算法具有可重用性。因此,当我准备一个 API(例如 PHP 和 MySQL)时,我对所有平台使用相同的数据检索格式。移动项目和 Web 项目都可以通过 JSON 或 XML 读取和发送数据,所以我认为没有问题。

尽管如果您将所有数据库连接集中在您的 API 上,您将在很大程度上减少连接(和错误)的数量。

您可以在 Foursquare 上看到一个正在运行的示例。

【讨论】:

【参考方案4】:

据我了解,您正在寻找一个易于学习和构建动态网站的轻量级 Web 开发框架。

根据您的要求,Web 前端应该能够发出 HTTP GET/POST 请求以从 API 获取 JSON 数据。以下选项最适合您:

    HTML + AJAX(用于非常简单的动态网站) PHP + AJAX(适用于更复杂的网站)

GET/POST 请求是使用 JS 库作为 AJAX 调用发出的,例如jQuery。此外,jQuery 提供了解析 JSON 响应的功能。

所以本质上你需要学习 PHP 和 jQuery,它们都非常流行且易于使用,并且背后有巨大的社区支持。

【讨论】:

【参考方案5】:

AngularJS 确实适用于单页类型的应用程序,以 Web 服务为食。与 jQuery ajax 调用 (imo) 相比,它的学习曲线要​​陡峭一些,因此根据您的需要,使用 jQuery 创建应用程序可能更有意义。

其他 JS MVC 框架(knockout、ember.js)在从 JSON 源获取数据方面可能具有类似的功能,但我对它们不是很熟悉,所以你可以看看并决定。

否则,您只需创建一个起始 html 页面,并在加载后启动对服务的 ajax 调用。

【讨论】:

【参考方案6】:

在我的“前世”中,我曾经是一名 Web 开发人员(10 年),现在我是一名全职的移动开发人员(从 2.5 年前开始)并且我使用 SOAP 创建了 Android 和 iOS 应用程序或 REST API。

在 Web 上,我喜欢使用 JQuery 和 JQuery-UI。 JQuery 有非常简洁的方法从 SOAP 或 REST Web 服务获取 JSON 数据,以填充网格、表单、在等待响应时显示进度的控件等。查看:http://api.jquery.com/jQuery.getJSON/

我目前正在开发一个带有 REST 操作和 JSON 数据的 iOS 应用程序,Web 开发团队正在使用骨干网和 JSON-REST 操作构建一个后端网站,以将前端与我交谈过的同一后端连接起来从 iOS 通过 JSON-REST。我知道他们经常使用backbone.js 的解析(读取JSON)、collection.toJSON()(转换为JSON)和模型同步方法(更多信息请参见http://backbonejs.org/)。

所以...我同意其他人的观点,只要您可以从 REST 获取 JSON,您就可以在您的 Web 和移动应用程序上使用相同的方法。

这里有一篇很好的博客文章,介绍了如何正确地使用 RESTful API 服务器:http://blog.mugunthkumar.com/articles/restful-api-server-doing-it-the-right-way-part-1/。

祝你好运!

【讨论】:

【参考方案7】:

通过使用 Web 服务(JSON 内容)来开发 Web 应用程序有两种主要方法

基于纯 HTML 的方法:在此模型中,您不需要任何服务器端脚本,例如 PHP、JSP 和 ASP.Net 等。 基于 JSON 的 REST 服务将由 javascript 使用并将数据呈现为 HTML 组件。 编程模型现在更流行,应用程序将变得流畅并且表现得像桌面应用程序。 有很多框架可以帮助您实现这一目标。 它们已经在之前的答案中提到过,例如 Angular.js、Ext.js、Backbone.js、Knockout.js、DoJo、Bootstrap。 甚至这个框架中的一些支持与 UI 组件和基于服务器端 JSON 的休息服务的数据绑定。不需要任何编码来使用 REST 服务和呈现 UI 组件。 它将通过此​​客户端框架自动完成。示例 DoJo

HTML 和服务器端脚本:在这种方法中,您需要使用任何服务器端脚本语言,例如 PHP、JSP、JSF 和 RoR、Django 等框架来实现此目标。 由于它涉及其他脚本语言和框架,因此与基于 HTML 和 JS 的方法相比,它具有学习曲线。

总的来说,我建议从第一种方法开始。

【讨论】:

【参考方案8】:

既然您已经在 Ruby 之上构建了 api,请考虑使用 Ruby on Rails。我是一名 C#/iOS 开发人员,直到最近才研究过 Ruby on Rails。这是一门很棒的语言,非常容易和灵活。有关更多信息,请查看此链接http://railsinstaller.org/。

它为您提供了更大的灵活性来实现 jQuery 和其他基于 javascript 的库。

您可以使用 Sqlite、MySql 和 PostgreSQl 数据库。

【讨论】:

以上是关于使用与移动设备相同的 API 开发网站的主要内容,如果未能解决你的问题,请参考以下文章

移动网站 CSS 在 devtools 中看起来与实际设备不同,我找不到覆盖

移动开发与响应式网站

如何使用 php 开发 ios 应用程序 [关闭]

WAP 网站与移动网站的传统 HTML

WAP 网站与移动网站的传统 HTML

从为移动设备开发的相同代码库为 Flutter Web 开发单独的 UI