
coco/api-policy-componentApi Policy Component是一个HTTP服务,为授权合作伙伴提供阅读器端点的门面。它主要功能包括:为B2B合作伙伴添加计算字段、屏蔽或隐藏非授权内容、根据账户配置重写查询。该组件通常与代理(Varnish)一起部署在其与实际阅读器端点之间,因此阅读器端点配置选项称为代理配置选项。
该门面不定义自己的端点或接口契约,而是对Reader API的接口进行特定修改,且对其了解有限。
注意:一个策略可能被多个过滤器使用,过滤器也可能与多个策略协同工作。
| Api过滤器 | 描述 | 应用端点 |
|---|---|---|
| identifiersFilter | 除非存在INCLUDE_IDENTIFIERS策略,否则从响应中移除identifiers字段 | /content, /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent |
| webUrlAdder | 为特定内容的响应添加webUrl字段 | /content, /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent |
| AddCanonicalWebUrl | 为特定内容的响应添加canonicalWebUrl字段 | /content, /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent |
| addSyndication | 如果响应中不存在canBeSyndicated字段,则添加该字段 | /content, /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent |
| linkValidationFilter | 如果存在INCLUDE_RICH_CONTENT策略,则在请求查询中添加validateLinkedResources=true | /content, /enrichedcontent, /internalcontent |
| suppressMarkup | 除非存在INCLUDE_RICH_CONTENT策略,否则从响应的bodyXML和openingXML JSON字段中移除富内容相关标记 | /content, /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent |
| mainImageFilter | 除非存在INCLUDE_RICH_CONTENT策略,否则从响应中移除mainImage字段 | /content, /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent |
| alternativeTitlesFilter | 除非存在INTERNAL_UNSTABLE策略,否则从响应中移除alternativeTitles字段 | /content, /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent |
| alternativeImagesFilter | 除非存在INTERNAL_UNSTABLE策略,否则从响应中移除alternativeImages字段 | /content, /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent |
| alternativeStandfirstsFilter | 除非存在INTERNAL_UNSTABLE策略,否则从响应中移除alternativeStandfirsts字段 | /content, /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent |
| removeCommentsFieldRegardlessOfPolicy | 从响应中移除comments字段 | /content |
| stripProvenance | 除非存在INCLUDE_PROVENANCE策略,否则从响应中移除publishReference和masterSource字段 | /content, /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent, /lists |
| stripLastModifiedDate | 除非存在INCLUDE_LAST_MODIFIED_DATE策略,否则从响应中移除lastModified字段 | /content, /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent, /lists |
| stripOpeningXml | 除非存在INTERNAL_UNSTABLE策略,否则从响应中移除openingXML字段 | /content, /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent |
| removeAccessFieldRegardlessOfPolicy | 从响应中移除accessLevel字段 | /content, /content-preview, /internalcontent-preview |
| canBeDistributedAccessFilter | 对于没有canBeDistributed=yes字段的内容,返回HTTP 403"Access denied"响应,除非存在INTERNAL_UNSTABLE策略 | /content, /enrichedcontent, /internalcontent |
| canBeSyndicatedAccessFilter | 当存在RESTRICT_NON_SYNDICATABLE_CONTENT策略时,对于没有canBeSyndicated=yes字段的内容,返回HTTP 403"Access denied"响应 | /content, /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent |
| unrolledContentFilter | 如果存在INCLUDE_RICH_CONTENT和EXPAND_RICH_CONTENT策略,则在请求查询中添加unrollContent=true | /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent |
| stripCommentsFields | 除非存在INCLUDE_COMMENTS策略,否则从响应中移除comments字段 | /content-preview, /internalcontent-preview, /enrichedcontent, /internalcontent |
| brandFilter | 如果存在FASTFT_CONTENT_ONLY策略,则在请求查询中添加forBrand=XXX;如果存在EXCLUDE_FASTFT_CONTENT策略,则添加notForBrand=XXX(其中XXX为FastFT的品牌ID) | /content/notifications |
| mediaResourceNotificationsFilter | 如果存在INTERNAL_UNSTABLE策略,则在请求查询中添加type=all;否则添加type=article | /content/notifications |
| accessLevelPropertyFilter | 除非存在INTERNAL_UNSTABLE策略,否则从响应中移除accessLevel字段 | /enrichedcontent, /internalcontent |
| accessLevelHeaderFilter | 除非存在INTERNAL_UNSTABLE策略,否则从响应中移除X-FT-Access-Level头部 | /enrichedcontent, /internalcontent |
| contentPackageFilter | 除非存在INTERNAL_UNSTABLE策略,否则从响应中移除contains和containedIn字段 | /enrichedcontent, /internalcontent |
| editorialDeskFilter | 除非存在INTERNAL_ANALYTICS策略,否则从响应中移除editorialDesk字段 | /content, /enrichedcontent, /internalcontent |
| internalAnalyticsTagsFilter | 除非存在INTERNAL_ANALYTICS策略,否则从响应中移除internalAnalyticsTags字段 | /content, /enrichedcontent, /internalcontent |
| 策略 | 描述 | 影响字段 |
|---|---|---|
| INCLUDE_RICH_CONTENT | 允许在响应中返回富内容(图像)相关字段/内容 | mainImage, bodyXML, openingXML |
| INCLUDE_IDENTIFIERS | 允许在响应中包含identifiers字段 | identifiers |
| INCLUDE_COMMENTS | 允许在响应中包含comments字段 | comments |
| INCLUDE_PROVENANCE | 允许在响应中包含内容来源信息 | publishReference, masterSource |
| INCLUDE_LAST_MODIFIED_DATE | 允许在响应中包含lastModified字段 | lastModified |
| FASTFT_CONTENT_ONLY | 仅在通知响应中包含FastFT品牌内容的事件 | * |
| EXCLUDE_FASTFT_CONTENT | 在通知响应中排除FastFT品牌内容的事件 | * |
| INTERNAL_UNSTABLE | 允许包含被视为"不稳定"的内部使用字段 | alternativeTitles, alternativeImages, alternativeStandfirsts, openingXML, accessLevel, contains, containedIn |
| INTERNAL_ANALYTICS | 允许内部分析使用字段 | editorialDesk |
| EXPAND_RICH_CONTENT | 如果与INCLUDE_RICH_CONTENT同时存在,允许在响应中展开富内容相关字段 | mainImage, embeds, alternativeImages, promotionalImage, members, leadImages, image |
| RESTRICT_NON_SYNDICATABLE_CONTENT | 如果存在,非可联合内容将返回403 Forbidden HTTP错误响应 | canBeSyndicated |
通常,头部从网关通过门面转发到Varnish层。Varnish应执行类似的头部转发,使得此处看到的头部也会被阅读器API看到。
以下头部是例外,它们都直接与底层TCP连接和数据编码相关。由于请求工作流的每个环节都是到新主机的独立连接,这些头部不会从一个TCP连接转发到下一个,但可能由本地库(如Jersey Client、Jetty)重新生成:
编译、运行测试并构建jar:
bashmvn clean install
本地运行:
bashjava -jar api-policy-component-service/target/api-policy-component-service-1.0-SNAPSHOT.jar server api-policy-component-service/config-local.yml
构建Docker镜像:
bashdocker build -t coco/api-policy-component:your-version .
运行Docker容器:
bashdocker run --rm -p 8080 -p 8081 --env "JAVA_OPTS=-Xms384m -Xmx384m -XX:+UseG1GC -server" --env "READ_ENDPOINT=localhost:8080:8080" --env "JERSEY_TIMEOUT_DURATION=***ms" coco/api-policy-component:your-version






manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务