主要功能模块
IPFS将所有的功能实现都封装在coreapi包中的几大模块中,核心数据结构定义在core包中,各大功能模块的定义通过interface给出(如下图1),所有这些模块构成了一个工具箱(如下图2中的kitchen sink);IPFS目前对用户只提供了cli接口,各个cmd根据具体功能需要从这个工具箱调用并组合各个模块的接口来实现相应功能。
- UnixfsAPI - 提供类Unix文件系统相关操作接口
- BlockAPI - 提供数据块操作接口
- DagAPI - 提供DAG服务操作接口
- NameAPI - 提供域名发布与解析操作接口
- KeyAPI - 提供Key索引操作接口
- PinAPI - 提供锁定文件操作接口,使文件不被GC清除
- ObjectAPI - 提供操作数据对象的接口
- DhtAPI - 提供DHT网络查询与广播操作接口
- SwarmAPI - 提供Swarm池操作接口
- PubSubAPI - 提供Peer订阅与发布接口
IPFS命令工具分发流程
IPFS将所有cmd的分发处理流程与数据结构定义都封装在一个外部包go-ipfs-cmds中,而实际cmd内容的执行体函数与选项配置信息则封装在内部commands包中,实际的cmd分发执行流程如下图:
用户输入的cmd由go-ipfs-cmds包进行分发后找到相应的执行体函数,其中需要访问到P2P网络的操作通过http request分发到Daemon服务进行执行,最后根据cmd功能需要调用并组合CoreAPI工具箱中的相关模块接口。
命令调用流程示例
add命令流程
- 用户调用ipfs add命令
- ipfs调用go-ipfs-cmds包进行cmd分发处理
- go-ipfs-cmds包内部通过http request请求Daemon服务
- Daemon定位UnixfsAPI模块并调用UnixfsAPI.Add接口
block stat命令流程
- 用户调用ipfs block stat命令
- ipfs调用go-ipfs-cmds包进行cmd分发处理
- go-ipfs-cmds包内部通过http request请求Daemon服务
- Daemon定位BlockAPI模块并调用BlockAPI.Stat接口