查看原文
其他

Candid:互联网计算机上应用程序接口的通用语言

Dfifans DFINITY 2022-07-07




DFINITY基金会致力于通过推出互联网计算机来恢复互联网的自由和开放根源,这是世界上第一个具有无限计算能力的Web速度区块链网络,旨在增强开发人员的体验并提供更多选择,这是我们一直以来的关注重点。

互联网计算机托管软件容器,这是可扩展的传统智能合约的发展,它将WebAssembly字节代码与代码在其中运行的内存页面捆绑在一起。

这使开发人员能够构建革命性的互操作性应用程序、系统和安全可靠的互联网服务,利用令牌化等区块链功能,并直接在互联网上而不是在专有基础架构上部署软件。

为了支持在开放平台上重新定义的软件范围的增长,在该平台上不同的程序可以直接相互集成,并且可以轻松地组合和扩展服务,我们的语言团队开发了Candid接口描述语言(IDL)。

该接口可以使那些人协作建立互联网计算机生态系统以完全无缝地连接其代码,即使使用不同的语言编写也是如此,我们很高兴在今天对其进行更详细的描述。

什么是Candid?

Candid是专门为互联网计算机设计的IDL,它为应用程序接口提供了一种通用语言,以促进以不同编程语言编写的服务之间的通信。

Candid的主要优势之一是它与语言无关,可实现以不同编程语言(例如Motoko、Rust和JavaScript等)编写的服务和前端之间的互操作性。它使开发人员可以安全、无缝地构建彼此依赖的服务,而不必担心外部服务的接口升级。

通过Candid,我们试图…

  • 提供接口和数据描述:使用Candid的开发人员能够描述服务的公共接口,通常以部署为容器的程序的形式进行描述。作为开发人员,您可以将运行在互联网计算机上的外部服务称为异步函数调用。


  • 原则上支持接口的演变:Candid通过精确指定可以在不破坏现有客户端的情况下进行的更改来支持服务接口的演变,例如,这意味着您可以安全地向服务中添加新的可选参数而不会失去与现有客户的兼容性。


  • 支持互联网计算机功能:Candid特别适合开发互联网计算机的应用程序。


Candid在某种程度上受到了类似IDL和数据定义语言(DDL),例如Protobuf、Thrift和JSON的启发,但是Candid提供了这些其他技术所没有的独特功能组合:

  • Candid是一种完整的界面描述语言,而不仅仅是一种数据描述语言。


  • Candid实现可以将Candid值直接映射到宿主语言的类型和值。


  • Candid本质上是一种高阶语言,它允许消息参数包含对其他服务和方法的引用。


  • Candid具有对特定互联网计算机功能(例如query注释)的内置支持。


  • Candid定义了有关如何以合理和综合的方式升级服务及其接口的规则,包括高阶使用。


如何使用Candid?

Candid的主要目的是将以某种宿主语言(例如Motoko、Rust或JavaScript)编写的程序与互联网计算机连接。在大多数情况下,您不必将程序数据作为Candid值处理。

相反,您可以使用熟悉的JavaScript值使用JavaScript之类的宿主语言,然后依靠Candid将这些值透明地传输到用Rust或Motoko编写的容器中。容器接收这些值,并将其视为原始Rust或Motoko值。

在某些情况下,以人类可读的形式直接查看Candid值很有用-例如,在命令行上记录、调试或与服务交互时。在这些情况下,您可以将文本表示形式用于Candid值。

Candid是一个强类型化的系统,具有一组规范地涵盖大多数用途的类型(要查看列表,请参阅我们的SDK页面)。

这组类型背后的原理是,它们足以描述数据的结构,以便可以对信息进行编码、传递和解码,但是它们不尝试描述超出此范围的语义约束。

无论您是以Motoko、Rust、JavaScript还是其他语言编写代码,Candid都支持这组类型,以允许基于适用于每种宿主语言的合理、规范的选择来自然映射数据类型。

可以使用Candid类型通过Candid服务描述文件(.did文件)来描述服务,该文件可以手动编写,也可以从服务实现中生成。

例如,如果您在Motoko中编写一个容器,则编译器在编译程序时会自动生成一个Candid描述。

在其他语言中,例如Rust,您将必须手动编写Candid接口说明。在类型的帮助下,我们开发了工具来自动生成UI并根据服务描述文件执行随机测试。

Candid对服务升级也很有用,服务随着时间而发展,他们获得了新的方法,而现有的方法返回了更多的数据,或者期望有其他参数。通常,服务作者希望在不破坏现有客户的情况下做到这一点。

Candid通过定义精确的子类型化规则(在Coq!中正式化)来帮助服务安全地发展,这些子类型化规则指示何时新的服务类型仍将能够与使用先前接口描述的所有其他方进行通信。

有兴趣了解更多吗?以下是一些与Candid相关的材料,可帮助您入门……

Candid的教程和资源

  • Candid的讲解视频:您可以观看文章开始有关如何使用Candid的视频教程。


  • Candid的文档和教程:您可以访问我们SDK网站上有关Candid的文档:https://sdk.dfinity.org/docs/candid-guide/candid-intro.html


  • Candid Crate:Candid Crate是一个序列化/反序列化库,可用于在Rust中创建Candid服务或客户端:https://crates.io/crates/candid


  • JavaScript的互联网计算机代理库:该代理包括对Candid的支持。


  • 社区支持的Candid库:Haskell、Elm、AssemblyScript和Kotlin当前存在库。


  • Candid UI:此容器为互联网计算机上运行的任何容器生成一个前端UI,从而使开发人员能够与Web上的容器(而不是终端)进行交互,并提供调试功能。



作者:DFINITY
翻译:Catherine


Dfinity主网已为Web应用程序的新时代做好了准备
新潮 | 互联网计算机 Dfinity
估值95亿美金,天使400倍,Dfinity来了!


进Dfinity交流社群,请添加小助手微信:

comiocn




长按关注

Dfinity微信公众号

给你第一手资讯和项目信息

更可随时答疑解惑



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存