Skip to content

Commit

Permalink
BCDA-7867: Add 429 recommendations (#193)
Browse files Browse the repository at this point in the history
## 🎫 Ticket

https://jira.cms.gov/browse/BCDA-7867

## 🛠 Changes

Added best practices section to "Building Your Application" page, with
first best practice being handling 429 status codes.

## ℹ️ Context for reviewers

BCDA has two 429 mechanisms, neither of which currently shows
recommendations on how to avoid / handle them. By clearly outlining how
we recommend clients handle them, we can improve the quality of the BCDA
experience and decrease the number of posts that require triaging in the
google group.

## ✅ Acceptance Validation


![image](https://github.com/CMSgov/bcda-static-site/assets/120701369/65df1e5a-f73d-42a2-98a5-b6d72688cc39)


## 🔒 Security Implications

- [ ] This PR adds a new software dependency or dependencies.
- [ ] This PR modifies or invalidates one or more of our security
controls.
- [ ] This PR stores or transmits data that was not stored or
transmitted before.
- [ ] This PR requires additional review of its security implications
for other reasons.

If any security implications apply, add Jason Ashbaugh (GitHub username:
StewGoin) as a reviewer and do not merge this PR without his approval.

---------

Co-authored-by: Alex Dzeda <[email protected]>
  • Loading branch information
alex-dzeda and alex-dzeda authored Apr 9, 2024
1 parent 84c6bba commit 0e94460
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 3 deletions.
8 changes: 8 additions & 0 deletions _includes/build/best_practices_429.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<div>
<p>A status code of <code>429</code> indicates “Too Many Requests.” This can occur due to two reasons:</p>
<ol>
<li>Making too many HTTP requests within a period of time</li>
<li>Trying to recreate jobs already marked as "In-Progress.” For reference, you can view both existing and past jobs using the /jobs endpoint. See <a href=build.html#jobs-history>Request Jobs History</a> for more details.</li>
</ol>
<p>Regardless of the reason, you will see a <strong>Retry-After</strong> response in the header. Wait until the period of time specified in the header has passed before making any more requests. This makes sure your client can adapt without manual intervention, even if the rate-limiting parameters change.</p>
</div>
7 changes: 4 additions & 3 deletions _includes/build/requesting_data_runouts.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,10 @@ <h4>Start a Job using 'runout' with /Group Explanation</h4>
<p>
If the request was successful, a 202 Accepted response code will be returned and the response will include a Content-Location header. The value of the Content-Location header indicates the location to check for job status and outcome. In the example header above, the number 42 in the URL represents the ID of the export job. The claims returned in the job will be filtered to have a serviceDate of 12/31/2020 or before.
</p>
<p>
If you're already requesting data from one endpoint and try to request data from that endpoint again while the first request is processing, you'll receive a 429 Too Many Requests error.
</p>
<p>
If you're already requesting data from one endpoint and try to request data from that endpoint again while the first request is processing, you'll receive a 429 Too Many Requests error. For guidance on how to handle 429 errors, refer to our <a href="#handling-429-error">best practices</a>.
</p>


<h3>Step 3: Check the job status</h3>
<p>See <a href="#checkJob" class="in-text__link"><em>Step 3: Check the job status</em></a> in the Request Data section above.</p>
Expand Down
28 changes: 28 additions & 0 deletions build.html
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,20 @@
</li>
</ul>
</li>


<li class="ds-c-vertical-nav__item">
<a class="ds-c-vertical-nav__label ds-c-vertical-nav__label" href="#bulk-best-practices">
Best Practices
</a>
<ul class="ds-c-vertical-nav__subnav">
<li class="ds-c-vertical-nav__subnav">
<a class="ds-c-vertical-nav__label ds-c-vertical-nav__label" href="#handling-429-error">
Handling 429 status codes
</a>
</li>
</ul>
</li>
</ul>
</aside>
<!-- Table of Contents END -->
Expand Down Expand Up @@ -266,6 +280,20 @@ <h2>
</div>
</div>
</div>

<div id="bulk-best-practices" class="guide-content">
<h1>
Best Practices
</h1>
<div id="handling-429-error">
<h2>
Handling 429 status codes
</h2>
<div class="ds-u-font-size--base">
{% include build/best_practices_429.html %}
</div>
</div>
</div>
</main>
</div>
</div>

0 comments on commit 0e94460

Please sign in to comment.