【问题标题】:cross language interfaces - do they exist? [closed]跨语言界面——它们存在吗? [关闭]
【发布时间】:2018-05-14 09:52:07
【问题描述】:

我想知道,这些天我修复了较旧的 Web 应用程序,但我经常偶然发现同样的问题,但我找不到解决方案。

Javascript 应用程序通常从其他来源获取数据。就我而言,它是 php。这些 Javascript 应用程序期望以某种方式向它们提供数据,如果它们没有以这种特定方式获取数据,则会发生错误并导致应用程序中断。

这可能很难调试,因为如果有人决定编辑例如传递该数据的 php 函数,他们通常不会从他们的现代 IDE 中得到任何提示,即数据可能以不正确的方式返回。

有没有一种方法可以在 php 和 javascript 之间建立一个接口,以便它们都需要遵守它?就像一个php接口。

我还知道,例如,当您使用 typescript 时,您可以为 javascript 应用程序创建一个界面。然后你就可以为php创建同样的接口了。

【问题讨论】:

  • 您可以使用json-schema.org 指定预期输出,然后进行一些测试来验证脚本是否实际产生预期输出。
  • 这是一个有趣的问题。我的第一个想法是使用 Swagger/OpenAPI 指定 API,然后生成某种静态类型定义 - tcomb 或其他东西。但是,我不确定是否存在可以轻松完成此任务的工具。

标签: javascript php interface


【解决方案1】:

正如其他人所暗示的,您在这里寻找的是一个 schema,它指定了输入和输出的 格式;还有一个更广泛的contract,它以 URL、方法名称等的形式指定 actions

对于 XML,最有可能使用 XML Schema 或 RelaxNG 指定模式;对于 JSON,有 JSON Schema,可能还有其他。

根据您的 API 风格,更广泛的合同会有很大差异。 WSDL 文件通常用于定义 SOAP API(这只是 XML-over-HTTP 的一种特殊约定),Swagger 和 OpenAPI 等工具可以指定 REST 样式的 API,通常使用 JSON。

然后所有这些都可以输入到工具中,这些工具会自动生成您的实现符合其合同的测试以及文档等。这些测试和文档实际上是您的目标:对于具有大量 AJAX 调用的遗留网站不要形成一个连贯的 API,最好的起点可能是一系列单元测试,这些单元测试可以确认相同的输入在您进行更改后给出相同的输出。

【讨论】:

    【解决方案2】:

    唯一想到的是 SOAP,其中 WSDL 文档提供有关 SOAP 函数(包括参数和数据类型)及其响应的信息。它是众所周知的,因为它是在 XML 中的,所以它与语言无关。

    我不知道 IDE 支持如何,但该标准已经存在了一段时间(至少从 2001 开始)所以我认为应该有一些可用的插件可以让您的生活更轻松。

    如果您可以控制服务器,也许您可​​以在Node 上运行 PHP 应用程序,这样您的 Javascript/Typescript 应用程序就可以直接与 Node 服务器通信并使用 Typescript 类型定义。但我猜这不是一个选择:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 2012-08-08
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      相关资源
      最近更新 更多