2012-02-26 45 views
7

我对完整的架构想法有不同的疑问。我希望有经验丰富的人能够帮助我,因为我几乎陷入了所有的可能性。API作为网站和移动应用程序的核心

我打算重写一个社区网站。我们的客户希望在未来使用原生移动应用程序。所以我需要考虑这一点。正因为如此,我决定创建一个基于PHP框架Kohana的100%REST API体系结构。我选择了Kohana,因为这样可以非常轻松地将内部API扩展到其他服务器,而无需额外的工作。 (Kohana威胁内部URL请求不是HTTP,因此开始时没有太多开销,并且可以通过一些小的代码更改扩展到HTTP)。

起初,API将是私有的,但稍后我们可能会公开让更多服务轻松连接到我们。

德基本REST结构如下:

  1. /猫
  2. /猫/ 1
  3. /猫/ 1 /自定义

'自定义' 可以是 '孩子的'例如。

同样适用于:

  1. /广告
  2. /投标
  3. /用户
  4. /横幅
  5. 等。

这些是API完美的实体因为移动应用程序肯定会使用所有这些功能。

所以我们可以总结出网站的核心是REST。所以基本上我想将网站作为API的客户端,就像将来的本地应用程序一样。这样维护似乎更容易。

我担心的是,除此之外还有很多事情(管理上传的文件,发票,发票的自动邮件,广告的自动邮件等等)。上传文件需要通过网站到达API。这是常见的做法吗?如果我不这样做,该网站将做上传逻辑,这使得该网站不再是客户端和应用程序本身。因此,移动应用程序甚至无法上传,API和网站都需要知道上传文件夹(重复逻辑)。

我想创建以下模块:

  1. 社区API
  2. 社区网站

阿比似乎是核心呢。但是...... cronjob等呢?其实他们不应该成为网站的一部分,因为这只是一个'客户'。我觉得他们应该直接与模型或API交互。所以基本上API变得更像一个门户的核心,我想我需要这样的:

  1. 社区为核心
    • 模型
    • Cronjobs
    • 自动邮件(cronjobs的一部分)
      • 发票等
  2. 社区API
    • 交互通过HTTP
  3. 社区网站
    • 网站
    • 联系

核心的cronjob核心模型s是REST结构的一个例外。他们是唯一可以在不通过API的情况下更改数据的人。至少这是我的想法,因为他们属于核心,API是核心。

但通过设计,这似乎只是错误的。操作应该只通过API!

备选:

  1. 社区为核心
    • 模型
  2. 社区API
    • 互动通过HTTP在核机型
  3. 社区商业
    • Cronjobs
    • 自动邮件(cronjobs的一部分)
      • 发票等
  4. 社区网站
    • 网站
    • 联系

这看起来通过设计更好的给我。 Mindmap illustration http://mauserrifle.nl/mindmap.jpg

主要问题

1)

应该cronjobs通过API或Core模式操作?

2)

我的发票的cronjob需要一个模板几乎当然主要网站的风格。但是如果我的cronjob是业务或核心的一部分,它不会知道我的主要网站。解决这个问题有意义吗?

3)

我的网站将使用胡子作为模板引擎。 (php和javascript都可以解析这些模板)。我想直接使用API​​的Ajax调用,但后来意识到:

该网站从API获取数据,格式化时间戳时间(Y-M-d)为模板,然后渲染。如果我让javascript直接调用api,javascript也必须有逻辑(格式化)。这是重复的代码!感觉像唯一的解决方案是调用网站的Ajax(调用api和格式)并返回格式化的json。我对吗?

但是....简单的调用,如删除一个广告可以去直接通过API(例如,删除:/广告/ 1

我收到电话的混合....

任何更好的解决方案此

4)

总:是我的建筑太复杂?我应该考虑任何替代方案?

我很想听听您的意见!

回答

3

一旦我听说要开发一个Web应用程序的好办法是建立一个API-Centric Web Application。对我来说,如果你将主要服务与公共API结合起来,构建一个以API为中心的应用程序,那么你就完全丧失了开发公共API的全部意义。

+0

我假设你的最后一句话是肯定的? (通过构建API-Centric,你已经拥有了一个公共API?)感谢那篇文章,它指的是Twitter博客,它激励我使用这种构建方式,所以一定要阅读这篇文章,然后回到这个话题稍后:) – mauserrifle 2012-02-27 13:56:21

+0

好吧,我已经实施的文章(kohana方式)的大部分。我对创建该网站作为API的客户端有很好的感觉。仍然不确定在哪里把cronjobs等(这是内部逻辑)。我还必须建立一个管理员(网站的一部分)来管理所有额外的实体,这感觉就像是一项工作的开销:/再次,一旦构建......未来有很多可能性。提示? – mauserrifle 2012-02-27 15:08:30

+0

这正是我的观点。几乎100%的案例都需要具备与应用程序相关的特定功能,例如cronjob,这些功能并不适合采用以API为中心的方法。这意味着在我看来,应该将Web服务与主应用程序(如wsdl)分离。 – 2012-03-07 13:22:09

2

这似乎并不符合逻辑的我。

是的,API和网站以及接下来可能会发生的事情都是单独的事情,网站应该是API本身的客户端,但由于它将简化事务,所以我相信您应该重新使用域类构建并建立您的网站逻辑。通过这种方式,您可以使用所有相同的代码库,并轻松处理所有问题,包括广告,发票和课程上传。

对于公共API,它应该是在一个单独的盒子如果可能的话再使用相同的域名类别,但不同的认证方法,因此,无论可能出现问题,也不会影响主业务。

你的cron的作业,才应使用防火通过API本身的调用,这些调用应在主应用程序(通过API网站)

如果你建立自己的网站进行不重复自己动手,如同使用与基础相同的代码并将web应用程序包装在其中一样,您将不会在q#2中引发问题。

同样适用于题号3.如果缠绕在API的网站,该网站可以使用API​​本身没有被一个独立的实体。

你的架构看似复杂,但如果你做这些事情,这将是简单的。;-)

祝你好运!

+0

感谢您的回复。如果我理解正确的话: 1.是一个像crons,邮件,ORM等(包括IMGS用于创建PDF) 2.内部处理核心API使用这个核心,使一切公共 3.网站将仅使用API​​的客户端。 因此得出结论:如果API崩溃,网站也停止运行,但自动进程将继续运行? 我也需要建立一个管理面板。我应该把这个作为客户端在网站上呢?否则我会得到2个接入点。感觉像额外的工作,使一切工作通过API,但最终还清 – mauserrifle 2012-02-27 15:25:31

+2

再次您好。 #1正确。核心内容包括所有内部流程和API副本。 #2第二次安装(在不同的linux box-vps API ONLY {for public}#3网站上可以用#1核心的API封装在单独的盒子上。 DB ONLY 1个用于公共API的linux框1个用于私有API和域类和网站的Linux框(或者网站也可以是通过内部网络用于安全性的不同框)这不应该是额外的工作,因为PHP类将会要%100相同,但存在于两个盒子,可扩展性和安全性。祝你好运。 – Phil 2012-02-27 17:12:12

0

REST只是一个发起请求的方式。处理请求的核心代码不应该与REST接口或HTTP紧密耦合。我建议将REST API设计为包含文件或类似的简单映射器。你的cron可以绕过整个REST API,直接包含文件。将请求接口与实际处理的代码分开。

+0

Kohana中有一个真棒子请求的系统已经,没有需要破解的事情。 – Kemo 2012-02-26 23:36:51

+0

我同意了黑客中的点本身我不你明白什么意思绕过REST API? – mauserrifle 2012-02-27 12:54:40

+0

REST API更多的是一个记录界面,用于从外部源与你的系统进行交互,你需要解析请求并判断它是否有效。 “可信/内部”来源t可以直接调用路由,不需要解析请求。 REST是你的邻居敲门要求的东西,cron是你已经在里面的室友,并且知道一切都在哪里。 – 2012-02-27 15:58:42

相关问题