Repository navigation
COMMS-5397 (b) Member v3 operation descriptions - #7759
Draft
cryptalith wants to merge 6 commits into
Draft
cryptalith wants to merge 6 commits into
cryptalith wants to merge 6 commits into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The second of four stacked drafts for COMMS-5397. Its base is (a), #7758. It describes every member v3.0 operation, so
member-v3.0.yamllists each one with its success response, token scopes, tag and summary. Summaries are in sentence case ("Create an education", "Fetch all invited positions").MemberV3ApiServiceImplV3_0. All 114 operations get@Operation(summary, tag, security) and@ApiResponse.git show 8179501c3a^). Every success response was checked against what its delegator returns; the table below links each one.createWorksanswers 200 with aWorkBulk, not 201;viewGroupIdRecordsreturns aGroupIdRecordspage, or a singleGroupIdRecordwhengroup-idornameis given;addPermissionNotificationanswers 201 withLocation;getRecordSummarytakes either read token, like every other read./read-limited, or a member client's 2-legged/read-public. The second sees public items only, asOrcidSecurityManagerImpl.checkAndFilterallows (isMyTokenlets client-credentials tokens through). Each read lists both as alternative security requirements./activities/updatefor every activity create, update and delete,/person/updatefor the person section. A review found that the pass adding the second read token had also widened seven creates (education, distinction, invited position, membership, qualification, service, research resource) to the read scopes; they say/activities/updateagain, ascheckClientAccessAndScopesrequires.issn:group-id after creating it from the ISSN portal; 409 on delete while peer reviews use the group (9040); 400 whenpageorpage-sizeis not a number (9020). (c) adds the 400 for an unknown put-code (9026).qis described on the argument that declares it.start,rowsandflreach Solr throughUriInfo, so they are declared on the method.OrcidOpenApiFilterdescribesorcidandputCodeonce, for the 100+ operations that take them. Theorciddescription carries the pattern of an ORCID iD (OrcidStringUtils.ORCID_STRING). The Registry does not match the path against it; an iD that doesn't fit just isn't found (404).openapi/base/member-v3.0.yamlgains:orcid_authOAuth 2.0 scheme, with authorization-code and client-credentials flows and what each scope allows;Not in this PR:
Runtime impact
None. The changes are annotations, a generator-only filter, and a YAML base file.
How it was checked
Executed test counts. One run at the head of (c) (fe4042b), which contains this branch and its review fixes; this branch's own commits change annotations only.
orcid-api-common: 132 tests (26 of them come with (c));orcid-pub-web: 390;orcid-api-web: 1249.All with 0 failures.
Generation:
defaultresponse is left.Redocly CLI 1.34.5, recommended rules, at the head of (c):
no-ambiguous-pathsis off./v3.0/client/{client_id}and/v3.0/{orcid}/emaillook ambiguous only to a linter that ignores the iD pattern; the server matches literal segments first.operation-4xx-responsewarnings remain until the common error responses land.Per-operation table
Success responses and scopes as the generated spec states them, and the delegator method each was checked against.
viewRecordGET /v3.0/{orcid}viewRecordviewRecordRecordGET /v3.0/{orcid}/recordviewRecordgetRecordSummaryGET /v3.0/{orcid}/summarygetRecordSummaryviewPersonGET /v3.0/{orcid}/personviewPersonviewPersonalDetailsGET /v3.0/{orcid}/personal-detailsviewPersonalDetailsviewBiographyGET /v3.0/{orcid}/biographyviewBiographyviewOtherNamesGET /v3.0/{orcid}/other-namesviewOtherNamescreateOtherNamePOST /v3.0/{orcid}/other-namescreateOtherNamedeleteOtherNameDELETE /v3.0/{orcid}/other-names/{putCode}deleteOtherNameviewOtherNameGET /v3.0/{orcid}/other-names/{putCode}viewOtherNameeditOtherNamePUT /v3.0/{orcid}/other-names/{putCode}updateOtherNameviewResearcherUrlsGET /v3.0/{orcid}/researcher-urlsviewResearcherUrlscreateResearcherUrlPOST /v3.0/{orcid}/researcher-urlscreateResearcherUrldeleteResearcherUrlDELETE /v3.0/{orcid}/researcher-urls/{putCode}deleteResearcherUrlviewResearcherUrlGET /v3.0/{orcid}/researcher-urls/{putCode}viewResearcherUrleditResearcherUrlPUT /v3.0/{orcid}/researcher-urls/{putCode}updateResearcherUrlviewKeywordsGET /v3.0/{orcid}/keywordsviewKeywordscreateKeywordPOST /v3.0/{orcid}/keywordscreateKeyworddeleteKeywordDELETE /v3.0/{orcid}/keywords/{putCode}deleteKeywordviewKeywordGET /v3.0/{orcid}/keywords/{putCode}viewKeywordeditKeywordPUT /v3.0/{orcid}/keywords/{putCode}updateKeywordviewAddressesGET /v3.0/{orcid}/addressviewAddressescreateAddressPOST /v3.0/{orcid}/addresscreateAddressdeleteAddressDELETE /v3.0/{orcid}/address/{putCode}deleteAddressviewAddressGET /v3.0/{orcid}/address/{putCode}viewAddresseditAddressPUT /v3.0/{orcid}/address/{putCode}updateAddressviewEmailsGET /v3.0/{orcid}/emailviewEmailsviewExternalIdentifiersGET /v3.0/{orcid}/external-identifiersviewExternalIdentifierscreateExternalIdentifierPOST /v3.0/{orcid}/external-identifierscreateExternalIdentifierdeleteExternalIdentifierDELETE /v3.0/{orcid}/external-identifiers/{putCode}deleteExternalIdentifierviewExternalIdentifierGET /v3.0/{orcid}/external-identifiers/{putCode}viewExternalIdentifiereditExternalIdentifierPUT /v3.0/{orcid}/external-identifiers/{putCode}updateExternalIdentifierviewActivitiesGET /v3.0/{orcid}/activitiesviewActivitiescreateWorkPOST /v3.0/{orcid}/workcreateWorkviewWorkSummaryGET /v3.0/{orcid}/work/summary/{putCode}viewWorkSummarydeleteWorkDELETE /v3.0/{orcid}/work/{putCode}deleteWorkviewWorkGET /v3.0/{orcid}/work/{putCode}viewWorkupdateWorkPUT /v3.0/{orcid}/work/{putCode}updateWorkviewWorksGET /v3.0/{orcid}/worksviewWorkscreateWorksPOST /v3.0/{orcid}/workscreateWorksviewSpecifiedWorksGET /v3.0/{orcid}/works/{putCodes}viewBulkWorkscreateFundingPOST /v3.0/{orcid}/fundingcreateFundingviewFundingSummaryGET /v3.0/{orcid}/funding/summary/{putCode}viewFundingSummarydeleteFundingDELETE /v3.0/{orcid}/funding/{putCode}deleteFundingviewFundingGET /v3.0/{orcid}/funding/{putCode}viewFundingupdateFundingPUT /v3.0/{orcid}/funding/{putCode}updateFundingviewFundingsGET /v3.0/{orcid}/fundingsviewFundingscreateEducationPOST /v3.0/{orcid}/educationcreateEducationviewEducationSummaryGET /v3.0/{orcid}/education/summary/{putCode}viewEducationSummarydeleteEducationDELETE /v3.0/{orcid}/education/{putCode}deleteAffiliationviewEducationGET /v3.0/{orcid}/education/{putCode}viewEducationupdateEducationPUT /v3.0/{orcid}/education/{putCode}updateEducationviewEducationsGET /v3.0/{orcid}/educationsviewEducationscreateEmploymentPOST /v3.0/{orcid}/employmentcreateEmploymentviewEmploymentSummaryGET /v3.0/{orcid}/employment/summary/{putCode}viewEmploymentSummarydeleteEmploymentDELETE /v3.0/{orcid}/employment/{putCode}deleteAffiliationviewEmploymentGET /v3.0/{orcid}/employment/{putCode}viewEmploymentupdateEmploymentPUT /v3.0/{orcid}/employment/{putCode}updateEmploymentviewEmploymentsGET /v3.0/{orcid}/employmentsviewEmploymentscreateQualificationPOST /v3.0/{orcid}/qualificationcreateQualificationviewQualificationSummaryGET /v3.0/{orcid}/qualification/summary/{putCode}viewQualificationSummarydeleteQualificationDELETE /v3.0/{orcid}/qualification/{putCode}deleteAffiliationviewQualificationGET /v3.0/{orcid}/qualification/{putCode}viewQualificationupdateQualificationPUT /v3.0/{orcid}/qualification/{putCode}updateQualificationviewQualificationsGET /v3.0/{orcid}/qualificationsviewQualificationscreateInvitedPositionPOST /v3.0/{orcid}/invited-positioncreateInvitedPositionviewInvitedPositionSummaryGET /v3.0/{orcid}/invited-position/summary/{putCode}viewInvitedPositionSummarydeleteInvitedPositionDELETE /v3.0/{orcid}/invited-position/{putCode}deleteAffiliationviewInvitedPositionGET /v3.0/{orcid}/invited-position/{putCode}viewInvitedPositionupdateInvitedPositionPUT /v3.0/{orcid}/invited-position/{putCode}updateInvitedPositionviewInvitedPositionsGET /v3.0/{orcid}/invited-positionsviewInvitedPositionscreateDistinctionPOST /v3.0/{orcid}/distinctioncreateDistinctionviewDistinctionSummaryGET /v3.0/{orcid}/distinction/summary/{putCode}viewDistinctionSummarydeleteDistinctionDELETE /v3.0/{orcid}/distinction/{putCode}deleteAffiliationviewDistinctionGET /v3.0/{orcid}/distinction/{putCode}viewDistinctionupdateDistinctionPUT /v3.0/{orcid}/distinction/{putCode}updateDistinctionviewDistinctionsGET /v3.0/{orcid}/distinctionsviewDistinctionscreateMembershipPOST /v3.0/{orcid}/membershipcreateMembershipviewMembershipSummaryGET /v3.0/{orcid}/membership/summary/{putCode}viewMembershipSummarydeleteMembershipDELETE /v3.0/{orcid}/membership/{putCode}deleteAffiliationviewMembershipGET /v3.0/{orcid}/membership/{putCode}viewMembershipupdateMembershipPUT /v3.0/{orcid}/membership/{putCode}updateMembershipviewMembershipsGET /v3.0/{orcid}/membershipsviewMembershipscreateServicePOST /v3.0/{orcid}/servicecreateServiceviewServiceSummaryGET /v3.0/{orcid}/service/summary/{putCode}viewServiceSummarydeleteServiceDELETE /v3.0/{orcid}/service/{putCode}deleteAffiliationviewServiceGET /v3.0/{orcid}/service/{putCode}viewServiceupdateServicePUT /v3.0/{orcid}/service/{putCode}updateServiceviewServicesGET /v3.0/{orcid}/servicesviewServicescreatePeerReviewPOST /v3.0/{orcid}/peer-reviewcreatePeerReviewviewPeerReviewSummaryGET /v3.0/{orcid}/peer-review/summary/{putCode}viewPeerReviewSummarydeletePeerReviewDELETE /v3.0/{orcid}/peer-review/{putCode}deletePeerReviewviewPeerReviewGET /v3.0/{orcid}/peer-review/{putCode}viewPeerReviewupdatePeerReviewPUT /v3.0/{orcid}/peer-review/{putCode}updatePeerReviewviewPeerReviewsGET /v3.0/{orcid}/peer-reviewsviewPeerReviewscreateResearchResourcePOST /v3.0/{orcid}/research-resourcecreateResearchResourceviewResearchResourceSummaryGET /v3.0/{orcid}/research-resource/summary/{putCode}viewResearchResourceSummarydeleteResearchResourceDELETE /v3.0/{orcid}/research-resource/{putCode}deleteResearchResourceviewResearchResourceGET /v3.0/{orcid}/research-resource/{putCode}viewResearchResourceupdateResearchResourcePUT /v3.0/{orcid}/research-resource/{putCode}updateResearchResourceviewResearchResourcesGET /v3.0/{orcid}/research-resourcesviewResearchResourcesviewPermissionNotificationsGET /v3.0/{orcid}/notification-permissionfindPermissionNotificationsaddPermissionNotificationPOST /v3.0/{orcid}/notification-permissionaddPermissionNotificationflagAsArchivedPermissionNotificationDELETE /v3.0/{orcid}/notification-permission/{id}flagNotificationAsArchivedviewPermissionNotificationGET /v3.0/{orcid}/notification-permission/{id}findPermissionNotificationviewGroupIdRecordsGET /v3.0/group-id-recordfindGroupIdRecordByGroupIdcreateGroupIdRecordPOST /v3.0/group-id-recordcreateGroupIdRecorddeleteGroupIdRecordDELETE /v3.0/group-id-record/{putCode}deleteGroupIdRecordviewGroupIdRecordGET /v3.0/group-id-record/{putCode}viewGroupIdRecordupdateGroupIdRecordPUT /v3.0/group-id-record/{putCode}updateGroupIdRecordviewClientGET /v3.0/client/{client_id}viewClientsearchByQueryCSVGET /v3.0/csv-searchsearchByQueryCSVexpandedSearchByQueryGET /v3.0/expanded-searchexpandedSearchByQuerysearchByQueryGET /v3.0/searchsearchByQuery