@@ -15,7 +15,7 @@ import code.api.util.FutureUtil.EndpointContext
1515import code .api .util .Glossary
1616import code .api .util .JsonSchemaGenerator
1717import code .api .util .NewStyle .HttpCode
18- import code .api .util .{APIUtil , CallContext , DiagnosticDynamicEntityCheck , ErrorMessages , NewStyle , RateLimitingUtil }
18+ import code .api .util .{APIUtil , CallContext , DiagnosticDynamicEntityCheck , ErrorMessages , NewStyle , OBPLimit , RateLimitingUtil }
1919import net .liftweb .json
2020import code .api .util .NewStyle .function .extractQueryParams
2121import code .api .util .newstyle .ViewNewStyle
@@ -31,7 +31,7 @@ import code.api.v5_0_0.{ViewJsonV500, ViewsJsonV500}
3131import code .api .v5_1_0 .{JSONFactory510 , PostCustomerLegalNameJsonV510 }
3232import code .api .dynamic .entity .helper .{DynamicEntityHelper , DynamicEntityInfo }
3333import code .api .v6_0_0 .JSONFactory600 .{AddUserToGroupResponseJsonV600 , DynamicEntityDiagnosticsJsonV600 , DynamicEntityIssueJsonV600 , GroupEntitlementJsonV600 , GroupEntitlementsJsonV600 , GroupJsonV600 , GroupsJsonV600 , PostGroupJsonV600 , PostGroupMembershipJsonV600 , PostResetPasswordUrlJsonV600 , PutGroupJsonV600 , ReferenceTypeJsonV600 , ReferenceTypesJsonV600 , ResetPasswordUrlJsonV600 , RoleWithEntitlementCountJsonV600 , RolesWithEntitlementCountsJsonV600 , ScannedApiVersionJsonV600 , UpdateViewJsonV600 , UserGroupMembershipJsonV600 , UserGroupMembershipsJsonV600 , ValidateUserEmailJsonV600 , ValidateUserEmailResponseJsonV600 , ViewJsonV600 , ViewPermissionJsonV600 , ViewPermissionsJsonV600 , ViewsJsonV600 , createAbacRuleJsonV600 , createAbacRulesJsonV600 , createActiveRateLimitsJsonV600 , createCallLimitJsonV600 , createRedisCallCountersJson , createFeaturedApiCollectionJsonV600 , createFeaturedApiCollectionsJsonV600 }
34- import code .api .v6_0_0 .{AbacRuleJsonV600 , AbacRuleResultJsonV600 , AbacRulesJsonV600 , CacheConfigJsonV600 , CacheInfoJsonV600 , CacheNamespaceInfoJsonV600 , CreateAbacRuleJsonV600 , CreateDynamicEntityRequestJsonV600 , CurrentConsumerJsonV600 , DynamicEntityDefinitionJsonV600 , DynamicEntityDefinitionWithCountJsonV600 , DynamicEntitiesWithCountJsonV600 , DynamicEntityLinksJsonV600 , ExecuteAbacRuleJsonV600 , GetOidcClientResponseJsonV600 , InMemoryCacheStatusJsonV600 , MyDynamicEntitiesJsonV600 , PostVerifyUserCredentialsJsonV600 , RedisCacheStatusJsonV600 , RelatedLinkJsonV600 , UpdateAbacRuleJsonV600 , UpdateDynamicEntityRequestJsonV600 , VerifyOidcClientRequestJsonV600 , VerifyOidcClientResponseJsonV600 }
34+ import code .api .v6_0_0 .{AbacRuleJsonV600 , AbacRuleResultJsonV600 , AbacRulesJsonV600 , CacheConfigJsonV600 , CacheInfoJsonV600 , CacheNamespaceInfoJsonV600 , CreateAbacRuleJsonV600 , CreateDynamicEntityRequestJsonV600 , CurrentConsumerJsonV600 , DynamicEntityDefinitionJsonV600 , DynamicEntityDefinitionWithCountJsonV600 , DynamicEntitiesWithCountJsonV600 , DynamicEntityLinksJsonV600 , ExecuteAbacRuleJsonV600 , GetOidcClientResponseJsonV600 , InMemoryCacheStatusJsonV600 , MyDynamicEntitiesJsonV600 , PopularApisJsonV600 , PostVerifyUserCredentialsJsonV600 , RedisCacheStatusJsonV600 , RelatedLinkJsonV600 , UpdateAbacRuleJsonV600 , UpdateDynamicEntityRequestJsonV600 , VerifyOidcClientRequestJsonV600 , VerifyOidcClientResponseJsonV600 }
3535import code .api .v6_0_0 .OBPAPI6_0_0
3636import code .abacrule .{AbacRuleEngine , MappedAbacRuleProvider }
3737import code .metrics .APIMetrics
@@ -7699,6 +7699,74 @@ trait APIMethods600 {
76997699 }
77007700 }
77017701
7702+ staticResourceDocs += ResourceDoc (
7703+ getPopularApis,
7704+ implementedInApiVersion,
7705+ nameOf(getPopularApis),
7706+ " GET" ,
7707+ " /api/popular-endpoints" ,
7708+ " Get Popular Endpoints" ,
7709+ s """ Returns the operation IDs of the 50 most popular endpoints based on usage metrics.
7710+ |
7711+ |This endpoint is public and does not require authentication.
7712+ |
7713+ |The response contains a simple list of operation_id strings, ordered by popularity (most called first).
7714+ |
7715+ |This includes endpoints from all API standards: OBP, Berlin Group, UK Open Banking, STET, Polish API, etc.
7716+ |
7717+ |Example operation_id formats:
7718+ |* OBP: OBPv4.0.0-getBanks
7719+ |* Berlin Group: BGv1.3-getAccountList
7720+ |* UK Open Banking: UKv3.1-getAccounts
7721+ |
7722+ | """ .stripMargin,
7723+ EmptyBody ,
7724+ PopularApisJsonV600 (
7725+ operation_ids = List (
7726+ " OBPv4.0.0-getBanks" ,
7727+ " OBPv4.0.0-getBank" ,
7728+ " BGv1.3-getAccountList"
7729+ )
7730+ ),
7731+ List (
7732+ UnknownError
7733+ ),
7734+ List (apiTagMetric, apiTagApi)
7735+ )
7736+
7737+ lazy val getPopularApis : OBPEndpoint = {
7738+ case " api" :: " popular-endpoints" :: Nil JsonGet _ => {
7739+ cc => implicit val ec = EndpointContext (Some (cc))
7740+ for {
7741+ (_, callContext) <- anonymousAccess(cc)
7742+ // Get top 50 APIs - use default date range (all time) with limit of 50
7743+ httpParams <- NewStyle .function.extractHttpParamsFromUrl(cc.url)
7744+ // Add limit=50 to the query params
7745+ limitParams = List (OBPLimit (50 ))
7746+ (obpQueryParams, _) <- createQueriesByHttpParamsFuture(httpParams, callContext)
7747+ queryParamsWithLimit = obpQueryParams ++ limitParams
7748+ topApis <- APIMetrics .apiMetrics.vend.getTopApisFuture(queryParamsWithLimit) map {
7749+ unboxFullOrFail(_, callContext, UnknownError )
7750+ }
7751+ } yield {
7752+ // Build lookup map from (partialFunctionName, shortVersion) -> operationId
7753+ // This handles OBP, Berlin Group, UK Open Banking, and other standards correctly
7754+ val allDocs = APIUtil .getAllResourceDocs
7755+ val lookupMap : Map [(String , String ), String ] = allDocs.map { doc =>
7756+ // Extract short version (e.g., "v4.0.0" from "OBPv4.0.0" or "v1.3" from "BGv1.3")
7757+ val shortVersion = doc.implementedInApiVersion.toString
7758+ (doc.partialFunctionName, shortVersion) -> doc.operationId
7759+ }.toMap
7760+
7761+ // Convert TopApi to operation_id, looking up correct format for each standard
7762+ val operationIds = topApis.flatMap { api =>
7763+ lookupMap.get((api.ImplementedByPartialFunction , api.implementedInVersion))
7764+ }
7765+ (PopularApisJsonV600 (operationIds), HttpCode .`200`(callContext))
7766+ }
7767+ }
7768+ }
7769+
77027770 }
77037771}
77047772
0 commit comments