一个免费API的数据量从174条暴涨到325条,增幅87%。开发者没做营销,没发通稿,只在文档里加了几行说明。这种沉默的扩张,比任何发布会都说明问题。
数据清洗先砍了重复项,卢旺达的村庄记录从冗余变精准。这不是做加法,是先做减法。
Mipaka的定位很窄:东非和中非7个国家的行政区划数据,REST接口,免费调用。Part 1只讲了基础功能——级联下拉、搜索过滤、批量导出。三个月后,同一个接口返回的信息已经完全不同。
核心变化有三层:时间维度拉通到47个历史纪元,空间维度补全124个殖民时期地名,刚果(金)的行政沿革从零碎记录变成完整链条。开发者把API从"现在时"改成了"全时段"。
47个纪元:从王国到殖民地的完整时间线
每个国家现在都有完整的历史链条,从殖民前王国、殖民占领期到当代政体。调用方式没变,加了个era参数:
GET /api/v1/eras/?country=CD
刚果(金)独占7个纪元:刚果王国、刚果自由邦、比属刚果、刚果共和国(独立初期)、扎伊尔、第三共和国、现行区划。每个纪元带注释、起止年份、殖民势力标记,以及该时期存在的行政区划链接。
乌干达的纪元更复杂,10个阶段里8个是殖民前王国和酋长国,包括布干达、布尼奥罗、托罗、安科莱,每个都标注了现任统治者。这不是历史科普,是数据结构里嵌入了活的传统政治实体。
纪元的粒度决定了API的适用场景。做选举数据分析?需要知道2015年刚果(金)从11省改26省的时间点。研究土地纠纷?得追溯到殖民前的领地归属。以前开发者得自己爬维基百科、对时间线、校验冲突,现在一个字段解决。
但有个陷阱:历史数据用is_active=false标记,默认查询不会返回。你必须显式过滤,否则以为数据丢了。
124个地名:金沙萨的三张身份证
主要城市现在携带完整命名史——土著名、殖民名、现代名,按纪元映射,标注语言来源。
金沙萨的案例最典型。调用 /api/v1/divisions/{kinshasa_id}/names/ 返回三段历史:
恩沙萨(Nshasa),基孔果语,土著名,刚果王国时期,源自河岸村庄名。
利奥波德维尔(Léopoldville),法语,殖民名,刚果自由邦时期,亨利·莫顿·斯坦利1881年以利奥波德二世命名。
金沙萨(Kinshasa),林加拉语,官方名,刚果民主共和国时期,1966年独立后恢复土著名。
地名覆盖按国别统计:刚果(金)124个历史地名,乌干达89个,卢旺达67个,肯尼亚54个,布隆迪43个,坦桑尼亚38个,南苏丹31个。总数没公布,但刚果(金)一家占四成以上。
这个设计的妙处在于etymology字段。不是简单的"旧称-新称"对照,而是把命名行为本身数据化——谁命名的、什么时候、用什么语言、依据什么。斯坦利1881年的命名行为,和1966年独立政府的去殖民化决策,在同一个JSON结构里平铺。
对做地图可视化的开发者来说,这意味着可以按时间轴滑动,看同一地点的标签如何被不同政权重写。
Level 100:消失的行政区划复活
现行边界之外,API现在收录已废止的行政区划。查询方式是在level参数里填100——这是个约定,用来隔离历史数据。
肯尼亚8个省(1963-2010),2010年宪法改成47个县之后,旧省界在法律上消失,但土地档案、选举记录、家族记忆里还在。Mipaka把它们标为is_active=false,level=100。
刚果(金)的11省时期(1997-2015),蒙博托倒台后的过渡安排,2015年改成26省。南苏丹的28州(2015-2020),基尔总统的行政命令,2020年恢复10州3行政区。
这些区划的共同点:存在过、有法律文件、影响过数百万人的身份认同,但现行官方地图里找不到。Level 100的设计让开发者可以选择性召回它们,又不污染标准查询。
刚果(金)的升级幅度最大。原版174条记录(省+地区),现在325条,追溯从1910年利奥波德的15个行政区到今天的26省。外加34个城市带地理坐标——API里首次出现地理编码数据。
开发者文档里列了下一步:历史边界几何数据、多语言搜索优化、更多国家的纪元数据。没有时间表。
这个项目的奇怪之处在于它的沉默。没有融资新闻,没有创始人访谈,GitHub仓库的commit记录是唯一的进度条。但数据精度在持续提升——卢旺达的重复村庄被清洗,刚果(金)的殖民档案被结构化,乌干达的王国统治者被标注。
对于做非洲市场产品的团队,这意味着什么?
热门跟贴