Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

能否增加格式校验的hook #1517

Closed
Adol1111 opened this issue Sep 27, 2018 · 15 comments · Fixed by #4542
Closed

能否增加格式校验的hook #1517

Adol1111 opened this issue Sep 27, 2018 · 15 comments · Fixed by #4542
Labels
feature request Categorizes issue as related to a new feature. help wanted

Comments

@Adol1111
Copy link

Adol1111 commented Sep 27, 2018

问题描述

目前apollo只能做一些简单的格式校验,但很多时候,数据本身是带有一定的格式要求的,特别是一些复杂的json、xml配置等等。目前只是对json、xml本身进行了校验,但是没有对内容进行校验。如果内容不符合要求,只有运行时才能发现,无法确定配置是否生效了(可能内容有问题,直接被抛弃了)。如果不及时回滚,甚至会发生服务无法重启之类的问题。

对于这种配置文件,目前的方案是使用open-api,单独搭建一个服务,但这样做略麻烦,而且配置地址会比较分散。

建议

增加类似git hook的机制,可以给每个namespace增加一个hook(url 地址)。如果发现有hook,在执行保存前调用一次做一个预校验。还可以增加一个post hook,比如把数据做加密什么的。

@nobodyiam
Copy link
Member

很好的建议,不过更倾向于通过spi的方式实现hook,在hook中可以调用url或者是运行自定义的校验逻辑

@Adol1111
Copy link
Author

spi也可以,但这样的话所有的配置都只能用一个相同的校验器。apollo的话主要是用的team比较多,每个项目,每个配置文件的校验规则也不太一样。用一个会比较麻烦,需要大家共同维护这个校验器。

@nobodyiam
Copy link
Member

可以在spi这一层根据appid, namespace之类的做分发,本质上和每个项目上配hook地址一个意思,只是说apollo可以不用关心这一层的细节

@Adol1111
Copy link
Author

这个我明白,但问题是这样的话hook的地址就要有地方单独管理,如果写死的话每次增加hook都要重新发布一下。我自己先想想怎么做比较合适,谢谢指教。

@nobodyiam nobodyiam added feature request Categorizes issue as related to a new feature. and removed enhancement labels Nov 30, 2019
@wu560130911
Copy link
Contributor

ConfigTextResolver 把这个处理逻辑与实际业务拆分开来?目前看是硬编码的,如果需要扩展,需要改动业务代码;

@danielzheng
Copy link

any update?

@hezhaoye
Copy link

这个我明白,但问题是这样的话hook的地址就要有地方单独管理,如果写死的话每次增加hook都要重新发布一下。我自己先想想怎么做比较合适,谢谢指教。

请教下,这个功能后面你们是怎么实现呢

@Adol1111
Copy link
Author

请教下,这个功能后面你们是怎么实现呢

我们最后没有在apollo中实现,利用openapi搭了一个新服务,写入apollo前会先在新服务进行校验,然后再利用OpenAPI写入到apollo中。因为公司的原因,apollo的原生管理平台被我们给弃用了,所有的写入操作在外部处理完之后才进入apollo。

@hezhaoye
Copy link

请教下,这个功能后面你们是怎么实现呢

我们最后没有在apollo中实现,利用openapi搭了一个新服务,写入apollo前会先在新服务进行校验,然后再利用OpenAPI写入到apollo中。因为公司的原因,apollo的原生管理平台被我们给弃用了,所有的写入操作在外部处理完之后才进入apollo。

用户配置的所有写入都是通过openAPI来操作,完全不用管理界面?

@Adol1111
Copy link
Author

请教下,这个功能后面你们是怎么实现呢

我们最后没有在apollo中实现,利用openapi搭了一个新服务,写入apollo前会先在新服务进行校验,然后再利用OpenAPI写入到apollo中。因为公司的原因,apollo的原生管理平台被我们给弃用了,所有的写入操作在外部处理完之后才进入apollo。

用户配置的所有写入都是通过openAPI来操作,完全不用管理界面?

新搭了一个管理平台(对静态配置、动态配置统一管理入口),接入了公司的审批流,对部分功能做了增强。校验、审批后通过openapi写入Apollo。不过只提供了Apollo管理平台的部分核心功能,目前看还是够用的。

@hezhaoye
Copy link

openapi写入Apollo前===》,是提供给用户类似hook的方式,让用户填写一个URL地址,在写入时增加调用check这种方式吗

@Adol1111
Copy link
Author

openapi写入Apollo前===》,是提供给用户类似hook的方式,让用户填写一个URL地址,在写入时增加调用check这种方式吗

我们的配置管理平台,支持定制配置模板(会根据规则生成前端界面),创建namespace的时候可以绑定一个配置模板,通过模板界面生成我们想要的配置。你可以认为通过模板生成的配置,已经是规范化的配置了(模板本身也有一些校验参数,比如required之类的选项)

@nobodyiam
Copy link
Member

openapi写入Apollo前===》,是提供给用户类似hook的方式,让用户填写一个URL地址,在写入时增加调用check这种方式吗

我们的配置管理平台,支持定制配置模板(会根据规则生成前端界面),创建namespace的时候可以绑定一个配置模板,通过模板界面生成我们想要的配置。你可以认为通过模板生成的配置,已经是规范化的配置了(模板本身也有一些校验参数,比如required之类的选项)

This sounds like a great feature.

@furaul
Copy link
Contributor

furaul commented May 6, 2022

能否提供最基础的类型校验,比如配置一个key的时候,默认值是String。
用户可以选择String Number Boolean Json Xml这些格式,选择具体格式类型后,如果value不符合要求,弹窗来提示,避免低级的配置错误。
当前在没有这个功能的情况下,大多数情况是用户client端接收了配置之后,在业务代码中自行校验,但是通用的合法性校验是一个共性逻辑,个人觉得可以由平台来做。

@nobodyiam
Copy link
Member

I think it's a good idea to start by adding some basic types and attach some basic validation with it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature request Categorizes issue as related to a new feature. help wanted
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants