Hmm If I were to design this... I would make it so that you don't have to replace the entire data source each time... I think a "suggestion" entry in the data source should be represented as it's own entity in the API...
e.g
instead of
PUT /api/datasource/<UUID>
overriding the entire datasource each time..
allow an api user to insert lines of text or rich objects.
POST /api/datasource/<UUID>/suggestion
{
...
}
or support bulk insertion.
POST /api/datasource/<UUID>/suggestion
[
{ ...
},...
]
This works better for scaling when you can't just replace all suggestions in one request (like an ETL like operation for a very large dataset). Then you can also allow for updating single "suggestion" entities without replacing the whole dataset.
I also think you should support rich objects, allow for things like boosting rules, different templates for object types, spelling correction, synonyms. I think this type of service would be really useful.
e.g
instead of PUT /api/datasource/<UUID> overriding the entire datasource each time..
allow an api user to insert lines of text or rich objects.
POST /api/datasource/<UUID>/suggestion
or support bulk insertion.POST /api/datasource/<UUID>/suggestion
This works better for scaling when you can't just replace all suggestions in one request (like an ETL like operation for a very large dataset). Then you can also allow for updating single "suggestion" entities without replacing the whole dataset.I also think you should support rich objects, allow for things like boosting rules, different templates for object types, spelling correction, synonyms. I think this type of service would be really useful.