The only offline usable layer must be service. Like most of the Julia packages adopting this "private" approach, an underscore (_) could be added to the function naming convention in repository and router layers to avoid suggesting private functions.
# Actual definition
function fetch(::Type{<:Experiment}, id::Integer)::Optional{Experiment}
...
end
# Proposed definition
function _fetch(::Type{<:Experiment}, id::Integer)::Optional{Experiment}
...
end