像你提到的标记通常只是没有信息的空白SVG图像(可以在
此处查看模板)。
因此,要创建SVG(或PNG):
- 服务通过某种CI系统从您那里获取更新数据
- 该服务生成相应的图像(SVG或PNG),并附加到某个`GET`端点
该服务有两种方法来实现这一点:
- 使用shields.io作为服务,将包含如何生成图像的信息的JSON发送到其
JSON端点
- 使用shields.io作为库或使用任何自定义手段在内部实现图像生成。
因此,即使在内部调用shields.io,具有徽章的SaaS应用程序通常会自己提供它们。这意味着每个服务都可以自己实现任何安全措施。
传递给shields.io的数据通常包括两个词和一些颜色。因此,为了生成徽章,不会暴露太多信息(请参见下面的示例)。此外,服务和shields.io之间的通信是加密的,并通过HTTPS发送。
例如,出于隐私考虑,大型公司通常具有仅限内部访问的托管解决方案,因此徽章也仅在内部可访问。
你问题中特别提到的徽章只包含来自应用商店或GitHub项目的公共数据,只要项目本身是公共的,这些数据通常都是公共的。那些徽章经常使用shields.io API根据公共数据自动生成它们。
但是,如果您查看Coveralls或Travis等内容的徽章,则会发现它们托管自己的徽章:
- `
![](https://travis-ci.org/Kibibit/achievibit.svg?branch=master)
`
- `
![](https://coveralls.io/repos/github/Kibibit/achievibit/badge.svg?branch=master)
`
以下是使用shields.io作为库并提供徽章的typescript示例:
首先,使用以下命令安装
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作为服务端点的数据。
您可以在控制器上下文中查看完整示例 这里 和 这里。
关于风险,主要考虑实际上暴露了哪些数据。几乎没有什么。如果您担心数据隐私问题,只需自己生成徽章并将其作为您想要的私人服务或嵌入。