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

2024-04-12

我对完整的架构理念有不同的问题。我希望有丰富经验的人可以帮助我,因为我几乎陷入了所有可能性之中。

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

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

基本的REST结构如下:

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

例如,“定制”可以是“儿童”。

同样适用于:

  1. /ads
  2. /bids
  3. /users
  4. /banners
  5. etc..

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

所以我们可以得出网站的核心是REST。所以基本上我想让网站成为 API 的客户端,就像未来的本机应用程序一样。这样维护起来就显得容易多了。

但令我担心的是,事实远不止这些(管理上传的文件、发票、发票自动邮件、广告自动邮件等等)。上传文件需要通过网站API。这是常见做法吗?如果我不这样做,网站将执行上传逻辑,这使得网站和应用程序本身不再有客户端。因此,移动应用程序甚至无法上传,API 和网站都需要知道上传文件夹(重复逻辑)。

我想创建以下模块:

  1. 社区 API
  2. 社区网站

看来Api才是核心。但是.... cronjobs 等呢?实际上它们不应该成为网站的一部分,因为这只是一个“客户端”。我觉得他们应该直接与模型或 API 交互。所以基本上 API 更像是通往核心的网关,我认为我需要这个:

  1. community-core
    • Models
    • Cronjobs
    • Auto Mailings (part of cronjobs)
      • 发票等
  2. community-api
    • 通过 HTTP 与 core 中的模型交互
  3. community-website
    • Website
    • Admin

核心 cronjobs 是 REST 结构的一个例外。它们是唯一一种无需通过 api 即可更改数据的工具。至少这是我的想法,因为它们属于核心,而 API 位于核心之上。

但从设计上来说,这似乎是错误的。操作只能通过API!

选择:

  1. community-core
    • Models
  2. community-api
    • 通过 HTTP 与 core 中的模型交互
  3. community business
    • Cronjobs
    • Auto Mailings (part of cronjobs)
      • 发票等
  4. community-website
    • Website
    • Admin

This look better by design to me. Mindmap illustration
(source: mauserrifle.nl http://mauserrifle.nl/mindmap.jpg)

主要问题

1)

cronjobs 应该通过 API 还是核心模型进行操作?

2)

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

3)

我的网站将使用 Mustache 作为模板引擎。 (php和javascript都可以解析这些模板)。我本以为直接使用 api 进行 ajax 调用,但后来意识到:

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

但是...像删除广告这样的简单调用可以直接通过 api(例如 DELETE: /ads/1

我接到各种各样的电话......

对此有更好的解决方案吗?

4)

总体而言:我的架构是否太复杂?我应该考虑什么替代方案?

我很想听听您的反馈!


有一次我听说开发 Web 应用程序的一个好方法是开发一个以 API 为中心的 Web 应用程序 http://net.tutsplus.com/tutorials/php/creating-an-api-centric-web-application/。对我来说,问题是,如果您将主要服务与公共 API 结合起来,构建以 API 为中心的应用程序,那么您就完全失去了开发公共 API 的全部意义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • C++ 相当于 PHP 的 pack()

    我的问题很简单 有没有类似 PHP 的pack and unpack C STL 中的函数 如果没有 是否有其他方法可以实现相同的目标 https www php net pack https www php net pack Thanks
  • Codeigniter:Base_url 似乎不起作用

    我开发了一个简单的网站 可以从 Twitter 公共时间线获取推文 将其缓存 60 秒等等 我最近将主机从 Hostgator 移至 Mediatemple 我的网站之前在 Hostgator 上运行良好 我的应用程序不使用数据库连接 也不
  • PHP 换行符 (\n) 不起作用

    由于某种原因我无法使用 n使用 PHP 输出到文件时创建换行符 上面只写着 n 到文件 我尝试使用 n 同样 它只写 n 如预期 但我一生都无法弄清楚为什么在字符串中添加 n 不会创建新行 我也尝试过 r n但它只是附加 r n 到文件中的
  • 客户端和服务器端编程有什么区别?

    我有这个代码 为什么这不会将 bar 写入我的文本文件 而是警告 42 注意 这个问题的早期修订明确涉及服务器上的 PHP 和客户端上的 JavaScript 问题的本质和解决方案是相同的any当一种语言在客户端上运行而另一种语言在服务器上
  • 使用php在html页面中显示bbcode

    我已经有一个 bbcode 字符串 mybbcode b Hello word b 使用 php 我想在 html 页面中以 html 格式显示它 例如 div gt b hello word b div 基本上其他人已经对你说过了 但是如
  • Zend 如何使用 mod_rewrite 解析前端控制器中的 URL?

    我不明白 Zend Framework 如何控制路由 我实际上正在尝试创建自己的控制器 路由类 编写了与 Zend 建议的 htaccess 相同的代码 以重写位于网站根目录的index php RewriteEngine On Rewri
  • 如何使用 jquery ajax 将锚点的值发送到 php

    我正在尝试使用 jquery 将几个锚点的值发送到 php 文件 但我没有从 php 脚本中得到回调 div class result div a href value class star Star 5 a a href value cl
  • PHP:如何发送电子邮件基础知识

    我想使用 PHP 从本地主机向其他人发送电子邮件 我需要做什么才能做到这一点 例如我需要安装邮件服务器吗 如果我没记错的话 有一种语言不需要邮件服务器来发送电子邮件 这样对吗 PHP ini里面有 邮件功能 如何配置这个 我在网上查了一下
  • 如何在 PHP 中运行 shell 脚本?

    我正在尝试使用 PHP 触发 shell 脚本的运行 本质上 当用户在我们用 PHP 编写的网站上完成一个操作时 我们希望触发一个 shell 脚本 该脚本本身调用一个 Java 文件 提前致谢 See shell exec http ph
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • PHP 和 MySQL 的重音字符错误

    我的问题是 直接通过 PHP 编写的内容是正确重音的 但是当重音单词来自 MySQL 时 字母会像这样 我尝试使用html charset as ISO 8859 1它修复了 MySQL 字母 但破坏了其他字母 解决这一切的一种方法是设置我
  • Laravel 上传前如何压缩图像?

    我正在制作一个图片库网站 用户可以在其中上传任何图像 它们将显示在前端 我需要在不影响图像质量的情况下压缩图像 以减小图像大小 以便页面加载速度不会影响那么大 我使用以下代码来上传图像 rules array file gt require
  • 用于获取随机数动词的 RESTful Web 服务

    如果您创建一个可以返回随机数的 RESTful Web 服务 您应该使用什么动词 我个人的感觉是使用 POST 因为你每次都会创建一个新的随机数 但我听到了一些使用 GET 的令人信服的论据 因为你本质上是在获取随机数 GET也有被缓存的危
  • PHP函数返回值到html标签

    我想获取函数的返回值并将其显示到特定的id 在我的 Class php 中 我有一个名为 login 的函数 用于验证密码是否正确 不正确
  • PHP多图像文件上传并存储到文件夹和数据库

    我正在建立一个网站 向夜间狂欢者展示大城市夜总会场所和活动的列表 我正在尝试构建一个后端页面 管理员可以在其中添加俱乐部并输入信息 例如机构名称 位置 相对价格等 当然还有俱乐部的一些图像 每个俱乐部必须至少有一张图像 即主图像 可以有额外
  • 除括号之间的内容外,所有内容均小写

    考虑以下字符串 LoReM FOO IPSUM dolor BAR Samet fooBar 我正在寻找一种方法来小写所有内容 除了 brackets 之间的内容应该被忽略 所以期望的输出是 lorem FOO ipsum dolor BA
  • Ember.JS - 如何在同一页面中使用多个模型、控制器和视图?

    我主要了解 Ember JS 的基础知识 大多数示例实际上只处理单个控制器和模型以在页面上显示某些内容 我真的很想用 Ember 构建一个完整的 Web 应用程序 所以有人能告诉我如何组织和连接多个控制器 模型和视图到一个页面中吗 例如 如
  • Heredoc:常用的“EOT”实际上是什么意思?

    PHP s 定界例子 http www php net manual en language types string php language types string syntax heredoc似乎总是使用 EOT 有时是 EOD 作
  • 您可以使用 MySQL 查询来完整创建数据库的副本吗

    我有一个包含 5 个表的 MySQL 数据库的实时版本和一个测试版本 我不断使用 phpMyAdmin 将实时版本中的每个表复制到测试版本 有谁有mysql查询语句来制作数据库的完整副本吗 查询字符串需要考虑结构 数据 自动增量值以及与需要
  • 在 PHP 命令行上显示完整的堆栈跟踪

    Problem 我的 PHP 堆栈跟踪缩写为 Stack trace 0 www html table app create php 128 SoapClient gt call call Array 1 www html table ap

随机推荐