1. 首页
  2. 实战操作

在分散网络上发布内容的权威指南

使用IPFS / IPNS以最小的工作量构建简单的分散RESTful端点

在分散网络上发布内容的权威指南
不要惊慌!你可以为Y2K危机做准备 Lee Dodds,1999年1月,Benttwig Publications

您可能听说IPFS称为永久性Web或不可变Web。这是一个很大的想法……是世界上所有信息的不可改变的存储。这一切都与内容寻址的想法有关,我们之前在这个博客上已经讨论过这个想法为了刷新你的记忆:IPFS上内容的不变性给了我们很好的东西,比如数据的重复数据删除(因为来自不同对等体相同内容将产生相同的哈希地址)和内容验证(所以我们可以确信内容没有如果其哈希值与我们预期/请求的哈希值匹配则被修改。这意味着没有人可以在我的同行的路上添加恶意代码(这里没有MITM攻击)。这是一个很棒的视频 这解释了很多关于IPFS的不变性如何实施的问题。

现在,永久性或不可变的网络都很好,但对于动态内容来说,它通常不太实用。那些像网站,博客,社交媒体一样变化的东西,以及我们目前在网上享受的几乎所有服务呢?为此,我们有IPNS,行星际名称系统。那么IPNS允许我们做的是添加不可变内容,然后更新指向该内容的指针,这样即使底层内容可能发生变化,我们链接到它的方式也不会。这基本上就像一个自我认证的文件系统,它保留了一些内容验证的细节(你知道你可以信任我的IPNS链接,因为你可以验证我是使用我的对等ID发布它的那个),但增加了可变引用的优点。通过这种方式,我可以更新我的网站,而无需让每个人都更改他们用来访问它的CID。太好了!

那IPNS究竟是什么?基本上,基于公钥基础结构(或PKI)的全局命名空间允许我们构建信任链(因此您可以跟随公共密钥到其路由对等方),为我们提供加密和身份验证,并且实际上仍然与其他名称服务兼容。因此,例如,我们甚至可以将DNS条目,洋葱或位地址等内容映射到IPNS地址。现在有几个例子来做这些类型的事情,所以它已经有效了。

话虽如此,IPNS(与许多分散的网络一样)仍然是一项正在进行中的工作。它仍然很慢,并不是所有的IPFS实现(即JavaScript版本)都完全支持它(尽管实际上有一个PR应该进入下一个版本)。但是,它可以在许多情况下使用,所以让我们从一个简单的例子开始吧……

说我想与各种(优选的,分散的)网络服务分享我自己的信息?但是,我想要完全控制这些信息,以便我知道我正在分享哪些信息,我可以决定我做什么,不想让各种服务了解我。换句话说,不是我们当前的集中式网络中的大部分工作方式。无论如何,要以编程方式共享此信息,我是否可以创建一个简单的RESTful API来访问服务?我会包括名称,生日,社交媒体链接,工作信息等内容,并可能将其作为JSON或其他东西提供。现在,我已经可以使用IPFS轻松完成此操作:只需添加一个JSON doc,其中包含来自我的同行的正确信息,并在线查看。

vim json#编辑json文件并保存
hash = $(ipfs add -wq json | tail -n 1)
打开“ https://ipfs.io/ipfs/$hash/json
在分散网络上发布内容的权威指南

这是您可以使用的模板(保存为json,没有任何扩展名)。出于以后示例的目的,您可能希望完全复制此文件,但要替换您自己的信息。最简单的方法是启动你最喜欢的文本编辑器,复制粘贴上面的文本,用你的信息更新,保存到“json”文件。然后只需在前一个代码块中运行最后两行代码即可添加和查看IPFS。

{ 
  “name”:{ 
    “first”:“first”,
    “last”:“last”,
    “other”:[] 
  },
  “bio”:“有趣的东西”,
  “pic”:{ 
    “url”:“ https ://i.stack.imgur.com/l60Hf.png “ 
  },
  ”dob“:”2018-01-01“,
  ”social“:[ 
    { 
      ”service“:”github“,
      ”username“:”username“ ,
      “url”:“ https://github.com/username ” 
    } 
  ],
  “work”:[ 
    { 
      “title”:“职称“, 
      ”雇主“:”纺织品“,
      ”开始“:”2018-01-01“,
      ”url“:” https://textile.io “,
      “结束”:null 
    } 
  ] 
}

现在,不幸的是,这个散列文件的不变性并没有完全削减它的动态API。但是,使用IPNS,我们可以将此哈希发布到我们的PeerID(显然不会更改),并且我们可以根据需要更新API响应文件。此外,我们现在有一个API响应,可以进行身份​​验证并直接链接到我们。非常酷,只需要一个额外的命令即可完成。

ipfs名称发布$ {hash}

尝试编辑JSON文件并再次添加和发布文件。IPNS链接应该(最终)解析为新的IPFS文件哈希。为了增加灵活性,您还可以为不同的内容和/或上下文使用不同的密钥。例如,我可以使用一个密钥发布我的API,使用另一个密钥发布我的网站,使用另一个密钥发布我的吸血鬼杀手粉丝小说。

ipfs key gen --type = rsa --size = 2048 keyname 
ipfs name publish --key = keyname $ {hash}

这绝对是一个很大的进步,但哈希对人类来说并不容易记住。有很多“解决方案”可以解决这个问题,包括网址缩短等等。但目前,最简单的解决方案之一是TXT在您控制的域上使用DNS 记录。看起来像这样的东西(${hash}用IPNS哈希替换的地方(可能是你的PeerID))。

dnslink = / IPNS / $ {散列}

然后,我们可以很好地访问它https://ipfs.io/ipns/your.domain

我的个人网站已经在GoDaddy注册了,所以这是我TXTdnslink我的IPNS哈希(对等身份)创建记录的截图。

在分散网络上发布内容的权威指南
在这里,我正在创建一个api要使用的子域。

现在,当我访问时https://ipfs.io/ipns/api.carsonfarmer.com/json,我将获得我的JSON API响应。超酷!

但是,我们可以做得更好。这仍然相当混乱,坦率地说,如果我们希望今天的普通Web2用户以最小的努力访问我的分散Web3内容,我们不希望他们必须处理网关和ipns / ipfs前缀,如果他们不不得不。分散的网络社区的一个主要感觉是用户体验不应该改变那么多 – 过渡应该透明但容易 – 这就是分散式网络将如何获胜。理想情况下,我们想要达到以下目的:https://api.carsonfarmer.com/json……

因此,我们可以创建一条A记录,将我们的子域指向IPFS对等端的IP地址,监听端口80上的HTTP请求(例如任何公共IPFS网关,如果需要,可以是您自己的)。但我们可以比这更好!因为我们不希望依赖IP地址是静态的,所以我们可以使用CNAME记录指向网关的DNS记录。这样,如果IP地址发生变化,我们仍然会指向正确的位置。不幸的是,CNAME记录不允许其他记录(如TXT),但IPFS的优秀人员允许我们为IPFS创建DNS TXT记录_dnslink.your.domain

所以现在,您的GoDaddy(或者您用来注册域名的任何人)设置可能看起来像这样。

在分散网络上发布内容的权威指南
我在这里使用公共IPFS网关,但如果你愿意,你可以在这里替换你自己的。
在分散网络上发布内容的权威指南
我们在这里使用特殊的_dnslink语法,将我们的api子域链接到我们的ipns哈希(PeerID)。

当您访问自定义网址时,会产生类似这样的内容:

在分散网络上发布内容的权威指南
http://api.carsonfarmer.com/json

现在,这不是那么好!一个普通的Web2网址指向未来的Web3资源……很酷!因此,如果您拥有自己的域,或者为您的团队或雇主管理域,那么现在您可以通过相对简单的方法在分散式系统中实现大多数静态API。

现在去构建一些令人惊奇的东西并将它托管在分散的网络上。一旦完成,请告诉我们您的建设。同时,不要忘记查看我们的其他一些教程,按照我们的纺织品构建开发人员培训系列,也许注册我们的纺织照片等待列表

原创文章,作者:Eric,如若转载,请注明出处:https://ipfsdrop.com/practice/zaifensanwangluoshangfabuneirongdequanweizhinan/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

(+86)18301922335

在线咨询:点击这里给我发消息

邮件:haskell@freechains.cn

工作时间:7×24小时

QR code