您提到的徽章通常只是没有信息的空白 SVG 图像(您可以在此处查看模板)。
因此,对于创建 SVG(或 PNG)的服务:
- 该服务通过某种 CI 系统从您那里获取更新数据
- 该服务生成附加到某个
GET
端点的相应图像(SVG 或 PNG)
该服务有两种方法来实现这一点:
因此,无论哪种方式,拥有徽章的 SaaS 应用程序通常都会为它们自己服务(即使它们在内部调用 shields.io)。这意味着每个服务都可以自己实施任何安全措施。
传递给 shields.io 的数据通常包括两个单词和一些颜色。因此,不会为了生成徽章而暴露太多信息(参见下面的示例)。此外,服务和 shields.io 之间的通信是加密的并通过 HTTPS 发送。
对于隐私,一个例子是大公司通常拥有只能在内部访问的托管解决方案,因此徽章也只能在内部访问。
您的问题中特别包含的徽章仅包含来自应用商店或 GitHub 项目的明星等的公共数据,只要项目本身是公开的,这些数据通常是公开的。这些徽章经常使用 shields.io API 使用公共数据自动生成它们。
但是,如果您查看像 Coveralls 或 Travis 这样的徽章,您会看到他们拥有自己的徽章:
这是一个关于如何使用 shields.io 作为库创建徽章并提供服务的小打字稿示例:
首先,安装gh-badges
npm i gh-badges --save
这就是你使用它的方式:
import { BadgeFactory } from 'gh-badges';
(async () => {
const bf = new BadgeFactory();
const format = {
format: 'svg',
text: [ 'coverage', '90%' ],
labelColor: '#894597',
color: '#5d5d5d',
template: 'for-the-badge',
logo: [
'data:image/png;base64,iVBORw0KGgoAAAA',
'NSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJL',
'R0QA/wD/AP+gvaeTAAAA/0lEQVRYhe3WMU7DM',
'BjFcadqh0qdWWBl7QU4Ss/AjsREF8RdOhYO0E',
'qoN2DhFIgBOvBjIIMVxSFyUiEhP8lD7C/v/T9',
'7sEMoKkoIe+Npn8qpOgCM2VBVVa1ZkzFDcjQd',
'apDqLIR+u/jnO1AACkABKABdAO9DjHEWfb7lA',
'LwOAQghXPXx6gJ4zE3GJIRwE0095Zhc4PO3iz',
'7x7zoq+cB5bifr9tg0AK7xFZXcZYXXZjNs+wB',
'giofG8hazbIDaeI5dFwAu8dxY2mE+KDyCWGCT',
'YLj3c86xNliMEh5BVLjFseNEjnVN8pU0BsgSh',
'5bwA5YnC25AVFjhpR6rk3Zd9K/1Dcae2pUn6m',
'qiAAAAAElFTkSuQmCC'
].join('')
};
return bf.create(format);
})();
这与上述作为服务端点发送到 shields.io 的数据基本相同。
您可以在此处和此处查看控制器上下文中的完整示例。
关于它的风险,主要是考虑这里实际暴露了哪些数据。这几乎没有。如果您担心数据隐私,您可以自己生成徽章并提供服务或根据需要私下嵌入它们;-)