草庐IT

php - 架构:API作为网站和移动应用程序的核心

coder 2024-01-03 原文

关于完整的体系结构构想,我有不同的疑问。我希望有丰富经验的人可以帮助我,因为我几乎陷入了所有可能性。
我打算重写一个社区网站。我们的客户希望将来使用 native 移动应用程序。因此,我需要考虑到这一点。因此,我决定基于PHP框架Kohana创建100%REST API架构。我之所以选择Kohana,是因为这可以轻松地将内部API扩展到其他服务器,而无需付出额外的努力。 (Kohana不以HTTP威胁内部url请求,因此一开始没有太多开销,并且可以通过一些小的代码更改就可以扩展到HTTP)。
最初,API将是私有(private)的,但后来我们可能将其公开,以使更多服务轻松地连接到我们。
基本的REST结构如下:

  • /cat
  • /cats/1
  • /cats/1/自定义

  • 例如,“习惯”可以是“ child ”。
    同样适用于:
  • /ads
  • /出价
  • /用户
  • /横幅
  • 等。

  • 这些是API的完美实体,因为移动应用程序肯定会使用所有这些功能。
    因此,我们可以得出结论,该网站的核心是REST。因此,基本上,我希望像将来的 native 应用程序一样,使网站成为API的客户端。这样,维护似乎容易得多。
    尽管令我感到担忧的是,事实还远远不止于此(管理上载的文件,发票,用于发票的自动邮件,用于广告的自动邮件等等)。上传文件需要通过网站到达API。这是惯例吗?如果我不这样做,则该网站将执行上传逻辑,这将使该站点不再是客户端,也不再是该应用程序本身。因此,移动应用甚至无法上传,API和网站都需要知道上传文件夹(重复逻辑)。
    我想到了创建以下模块:
  • community-api
  • 社区网站

  • 那时,Api似乎是核心。但是.... cronjobs等呢?实际上,它们不应该是网站的一部分,因为这只是“客户”。我觉得他们应该直接与模型或API进行交互。因此,基本上,API变得更像是通往核心的网关,并认为我需要这样做:
  • 社区核心
  • 模型
  • Cronjobs
  • 自动邮件(cronjobs的一部分)
  • 发票等


  • community-api
  • 通过HTTP
  • 与核心模型交互

  • 社区网站
  • 网站
  • 管理员


  • 核心cronjobs是REST结构的一个异常(exception)。它们是唯一无需通过api即可更改数据的控件。至少那是我的想法,因为它们属于核心,而API在核心之上。
    但是从设计来看,这似乎是错误的。只能通过API进行操作!
    选择:
  • 社区核心
  • 模型

  • community-api
  • 通过HTTP
  • 与核心模型交互

  • 社区业务
  • Cronjobs
  • 自动邮件(cronjobs的一部分)
  • 发票等


  • 社区网站
  • 网站
  • 管理员


  • 这对我来说看起来更好。

    (来源:mauserrifle.nl)
    主要问题
    1)
    cronjobs应该通过API还是Core模型进行操纵?
    2)
    我的发票cronjob当然非常需要主要网站的样式的模板。但是,如果我的cronjob是业务或核心业务的一部分,它将不了解我的主要网站。解决这个问题有什么意义?
    3)
    我的网站将 mustache 用作模板引擎。 (php和javascript都可以解析这些模板)。我以为直接将API用于ajax调用,但后来意识到:
    该网站从api获取数据,将时间戳格式设置为模板的日期(Y-m-d),然后进行渲染。如果我让javascript直接调用api,则javascript也必须具有逻辑(格式)。这是重复的代码!感觉唯一的解决方案是调用ajax网站(调用api和format)并返回格式化的json。我对吗?
    但是....简单的调用(例如删除广告)可以直接通过api(例如DELETE:/ads/1
    我打来个电话...
    有更好的解决方案吗?
    4)
    总的来说:我的架构太复杂了吗?我应该考虑其他选择吗?
    我希望听到您的反馈!

    最佳答案

    一旦我听说开发Web应用程序的好方法就是开发API-Centric Web Application。对我而言,如果将主服务耦合到公共(public)API,构建以API为中心的应用程序,那么您根本就失去了开发公共(public)API的全部目的。

    关于php - 架构:API作为网站和移动应用程序的核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9453359/

    有关php - 架构:API作为网站和移动应用程序的核心的更多相关文章

    1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

      我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

    2. ruby - 将差异补丁应用于字符串/文件 - 2

      对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

    3. ruby - 多次弹出/移动 ruby​​ 数组 - 2

      我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby​​数组,我们在StackOverflow上找到一

    4. ruby - 如何指定 Rack 处理程序 - 2

      Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

    5. ruby - 在 Ruby 中编写命令行实用程序 - 2

      我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

    6. ruby-on-rails - Rails 应用程序之间的通信 - 2

      我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

    7. ruby - 无法运行 Rails 2.x 应用程序 - 2

      我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

    8. ruby - RSpec - 使用测试替身作为 block 参数 - 2

      我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

    9. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

      刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

    10. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

      我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

    随机推荐