Значки, как вы упомянули, обычно представляют собой пустые изображения SVG без информации (вы можете взглянуть на шаблоны здесь ).
Итак, для службы по созданию SVG ( или PNG):
- служба получает данные обновления от вас через какую-либо систему CI
- Служба создает соответствующее изображение (SVG или PNG), которое прикреплено к определенная
GET
конечная точка
Служба может реализовать это двумя способами:
- Использовать shields.io в качестве службы, отправив JSON с информацией о как сгенерировать изображение для их JSON конечной точки
- Реализовать генерацию изображения внутри, используя shields.io в качестве библиотеки или любым другим способом.
Так или иначе, приложения SaaS, имеющие значки, обычно обслуживают их сами (даже если внутренне они вызывают shields.io). Это означает, что каждая служба может самостоятельно реализовать любые меры безопасности.
Данные, которые передаются в shields.io, обычно содержат два слова и несколько цветов. Таким образом, для создания значков раскрывается не так много информации (см. Пример ниже). Кроме того, связь между сервисом и shields.io шифруется и отправляется по HTTPS.
Что касается конфиденциальности, одним из примеров является то, что крупные компании обычно размещают решения, которые доступны только для внутреннего использования, поэтому значки доступны также только для внутреннего использования.
Значки, конкретно включенные в ваш вопрос, содержат только опубликовать c данные из магазинов приложений или звезд для проекта GitHub et c. который обычно публикуется c, пока сам проект публикуется c. Эти значки часто используют API shields.io для их автоматического создания с использованием данных publi c.
Но если вы посмотрите на значки для таких вещей, как 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 как сервис конечная точка, упомянутая выше.
Вы можете увидеть полный пример в контексте контроллера здесь и здесь .
О риске этого В основном думают о том, какие данные на самом деле выставлены здесь. Это почти ничего. и если вы беспокоитесь о конфиденциальности данных, вы можете просто создать значки и самим их обслуживать или встраивать их как угодно конфиденциально; -)