-
Notifications
You must be signed in to change notification settings - Fork 20
Remove WebService and WebServiceVersion, replace with Service, Interface and InterfaceDependency #563
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
base: v6
Are you sure you want to change the base?
Conversation
…ace and InterfaceDependency schemas.
| "type": "string", | ||
| "_instruction": "Enter a description of this interface." | ||
| }, | ||
| "developer": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should be contributor according to our new plans. However we need to decide for one of the suggested options first #513
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also: should the developer not be part of the SoftwareVersion rather then on the Interface? even if code is only adjusted for the interface the software version will have to change (I though we wanted to conceptualize the Interface, and assume the code base is the software).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
An interface is independent of the software that implements it. It is possible to have different software tools that implement the same interface.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So where is the code for the interface? we don't link it right now
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The "definition" property links to a WebResource, which is generally a JSON file for REST APIs, or could be a formal human-readable document for other kinds of interface.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"author" would be a better term than "developer" (or rather, we should use the "author" role when we switch to "contributor")
| "controlledTerms:CommunicationProtocol" | ||
| ] | ||
| }, | ||
| "custodian": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should most like be removed depending on the option decided in #513
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If interfaces are versioned they should in principle be handled as research products with research products versions. However I though we wanted to conceptualize the interface, and assume the code base is the software (making the interface explicitly not a research product with independent versioning). Otherwise the link to the code is missing that would allow for an independent versioning.
Question: If the same software version code base implements multiple versions of the same interface should we just treat them as equal variants with no preference? Then the version identifier actually just becomes just an internal identifier (no version specification needed, should be covered in definition and description). If there is a preference then we need to treat the interface as an independent product with versions I think (we may want to rethink the base elements of RP/RPV).
Do we need to adapt the naming here as well to CommunicationInterface ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
An interface is an independent product. There can be multiple pieces of software that implement a given interface; equally a given piece of software can implement multiple versions of a given interface. There is not necessarily any relationship between the interface version identifier and the software version identifier.
I'm not sure it should be considered a research product, however.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should not be concerned about the semantics here. The research product can easily be renamed to something more general (would anyway make sense).
If it is an independent product it needs to be implemented in the same way as the others and it has to have then it's own code base.
However I understood this a bit differently. If we have code this is first and foremost a software. That software might have code for an interface as well or only holds the code for an interface, but the interface itself is just the concept of what the code is encoding.
@olinux can we please get your input here as well.
@apdavison maybe some examples would help for the expected cases?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For REST APIs, the interface definition is more like a metadata model. It is very common to use the OpenAPI standard (formerly Swagger), for which the interface definition is a single JSON file. I don't think we would register the openMINDS schema templates as software?
For non-REST APIs, the interface definition would probably be a human-readable, but not machine-readable document.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(Here is the definition for the KG Core API: https://core.kg.ebrains.eu/v3/api-docs/v3)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As another example, at one point I rewrote the neuromorphic Job Queue API from scratch (for maintainability and performance), using different Python libraries but keeping the same API.
| "type": "string", | ||
| "_instruction": "Enter a description (or abstract) of this service." | ||
| }, | ||
| "feature": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since Services are now broader this can't be only pointing to SoftwareFeatures
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
agreed, this needs some discussion.
| "type" | ||
| ], | ||
| "properties": { | ||
| "custodian": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should be removed depending on what we decide for #513
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Needs to explicitly links to the legal entity providing the service (through #513 or specifically). We need to be able to filter services for this relation (custodian might in principle be also from somewhere else)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If in the software version the dependency can be to an interface or to a software version this can't be interface specific to interface but needs to be for interface or software version (failure impact would matter for both, no?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure I understand, can you clarify?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
aims towards the issue I have with having a "dependency" and a "requirement" property in the software version. impact of failure is critical in both cases.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SoftwareApplicationCategory list and SoftwareFeature list need to be revised I think
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
agreed
| "minItems": 1, | ||
| "uniqueItems": true, | ||
| "_instruction": "Enter all requirements of this software version.", | ||
| "_instruction": "Enter any requirements of this software version that are not listed under the 'dependency' property.", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please explain difference between requirement and dependency. I don't see why we want to separate this. Could we think of a joint solution?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I did it this way for backwards compatibility and ease of migration. "requirement" is an array of strings, while "dependency" is an array of instances. My idea was to keep them both for v5, and then merge them for v6. Otherwise, we need to create SoftwareVersions for all strings in existing "requirement" properties during the v4-v5 migration.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think we need to create SoftwareVersions. We can also say a property called "requirement" or "dependency" to embed ToolDependency (name TBD) which states the failureImpact and links to either an Interface, a SoftwareVersion, a File (to requirements.txt; TBD), a WebResource (to requirements.txt; TBD) or a Configuration (or a StringProperty).
Let's discuss this further
Design document
Related:
Replaces:
openMetadataInitiative/openMINDS_computation#63