<!-- .slide: data-background="https://raw.githubusercontent.com/department-of-veterans-affairs/va.gov-team/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/images/checklist.jpg"-->
<div style="background-color: rgba(0, 0, 0, 0.7); color: #fff; padding: 20px; margin: 0 -1em;">
# Endpoint Punch List
</div>
---
<!-- .slide: data-background="https://raw.githubusercontent.com/department-of-veterans-affairs/va.gov-team/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/images/emails-controller.jpg"-->
<div style="background-color: rgba(0, 0, 0, 0.5); color: #fff; padding: 20px;">
# Endpoint Code
</div>
---
<!-- .slide: data-background="https://raw.githubusercontent.com/department-of-veterans-affairs/va.gov-team/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/images/profile_swagger.jpg"-->
<div style="background-color: rgba(0, 0, 0, 0.5); color: #fff; padding: 20px;">
# Swagger Docs
</div>
---
<!-- .slide: data-background="https://raw.githubusercontent.com/department-of-veterans-affairs/va.gov-team/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/images/pciu-mockdata.jpg"-->
<div style="background-color: rgba(0, 0, 0, 0.5); color: #fff; padding: 20px;">
# Betamocks
</div>
---
<!-- .slide: data-background="https://raw.githubusercontent.com/department-of-veterans-affairs/va.gov-team/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/images/tests.jpg"-->
<div style="background-color: rgba(0, 0, 0, 0.5); color: #fff; padding: 20px;">
# Spec Coverage
</div>
---
<!-- .slide: data-background="#efefef" -->
# Frontend Signoff
```javascript
{
"data": {
"attributes": {
"email": "john@example.com",
"effective_at": "2018-02-27T14:41:32.283Z"
}
}
}
```
:white_check_mark: :white_check_mark: :white_check_mark:
---
<!-- .slide: data-background="#2a9a40" -->
# Endpoint Code
---
<!-- .slide: data-background="https://raw.githubusercontent.com/department-of-veterans-affairs/va.gov-team/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/images/pciu-swagger.jpg"-->
---
<!-- .slide: data-background="#efefef" -->
# Endpoint Creation
- Integrate an external service<!-- .element: class="fragment" data-fragment-index="1" -->
- Service object<!-- .element: class="fragment" data-fragment-index="2" -->
- Controller, route and serializer<!-- .element: class="fragment" data-fragment-index="3" -->
---
<!-- .slide: data-background="#efefef" -->
# Service Object
- Calls the service's endpoints<!-- .element: class="fragment" data-fragment-index="1" -->
- Dependencies<!-- .element: class="fragment" data-fragment-index="2" -->
- Service class<!-- .element: class="fragment" data-fragment-index="3" -->
- Config class & Faraday connection<!-- .element: class="fragment" data-fragment-index="4" -->
- Response class<!-- .element: class="fragment" data-fragment-index="5" -->
- settings.yml<!-- .element: class="fragment" data-fragment-index="6" -->
---
<!-- .slide: data-background="https://raw.githubusercontent.com/department-of-veterans-affairs/va.gov-team/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/images/pciu_swagger.jpg"-->
---
<!-- .slide: data-background="#efefef" -->
## [Service Object Implementation](https://github.com/department-of-veterans-affairs/va.gov-team/tree/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/supporting_code/service-object-implementation.md)
---
<!-- .slide: data-background="#efefef" -->
## [Controller/Route/Serializer](https://github.com/department-of-veterans-affairs/va.gov-team/tree/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/supporting_code/controller-route-serializer.md)
---
<!-- .slide: data-background="#2a9a40" -->
# Swagger Docs
---
<!-- .slide: data-background="https://raw.githubusercontent.com/department-of-veterans-affairs/va.gov-team/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/images/profile-swagger.jpg"-->
<div style="background-color: rgba(0, 0, 0, 0.5); color: #fff; padding: 20px; margin-bottom: 8em;">
## Request/Response Docs
</div>
---
<!-- .slide: data-background="https://raw.githubusercontent.com/department-of-veterans-affairs/va.gov-team/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/images/swagger-response.jpg"-->
<div style="background-color: rgba(0, 0, 0, 0.5); color: #fff; padding: 20px; margin-bottom: 8em;">
## Model Docs
</div>
---
<!-- .slide: data-background="#efefef" -->
# Swagger Files
```bash
app/swagger/requests/*
```
<!-- .element: class="fragment" data-fragment-index="1" -->
```bash
app/swagger/schemas/*
```
<!-- .element: class="fragment" data-fragment-index="2" -->
```bash
app/controllers/v0/apidocs_controller.rb
```
<!-- .element: class="fragment" data-fragment-index="3" -->
[Swagger implementation](https://github.com/department-of-veterans-affairs/va.gov-team/tree/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/supporting_code/swagger-impementation.md)<!-- .element: class="fragment" data-fragment-index="4" -->
---
<!-- .slide: data-background="#2a9a40" -->
# Betamocks
---
<!-- .slide: data-background="#efefef" -->
# Betamocks Process
1. Set config<!-- .element: class="fragment" data-fragment-index="1" -->
2. Create recording<!-- .element: class="fragment" data-fragment-index="2" -->
3. Update mock data table<!-- .element: class="fragment" data-fragment-index="3" -->
---
<!-- .slide: data-background="#efefef" -->
## [Betamocks Config](https://github.com/department-of-veterans-affairs/va.gov-team/tree/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/supporting_code/betamocks-config.md)
---
<!-- .slide: data-background="#efefef" -->
## [Betamocks Recording & Mock Data Table](https://github.com/department-of-veterans-affairs/va.gov-team/tree/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/supporting_code/betamocks-recording-mock-data-table.md)
---
<!-- .slide: data-background="#2a9a40" -->
# Spec Coverage
---
<!-- .slide: data-background="#efefef" -->
# Spec Areas
- Service object specs
- Request specs
- VCR cassettes
- Response schema
- [Spec files examples](https://github.com/department-of-veterans-affairs/va.gov-team/tree/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/supporting_code/spec-files-examples.md)
---
<!-- .slide: data-background="#efefef" -->
## `match_response_schema`
```ruby
expect(response).to match_response_schema(
'email_address_response'
)
```
<!-- .element: class="fragment" data-fragment-index="1" -->
---
<!-- .slide: data-background="#efefef" -->
### [`match_response_schema` Implementation](https://github.com/department-of-veterans-affairs/va.gov-team/tree/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/supporting_code/match_response_schema-implementation.md)
---
<!-- .slide: data-background="#2a9a40" -->
# In Conclusion
---
<!-- .slide: data-background=""https://raw.githubusercontent.com/department-of-veterans-affairs/va.gov-team/master/platform/engineering/backend/tutorials/endpoint-punch-list-presentation/images/endpoint-punch-list.jpg"-->
<div style="background-color: rgba(0, 0, 0, 0.8); color: #fff; padding: 20px;">
## [Endpoint Punch List](https://github.com/department-of-veterans-affairs/va.gov-vfs-teams/blob/master/DeveloperDocs/vets-api/vets-api-endpoint-punch-list.md)
</div>
---
<!-- .slide: data-background="#efefef" -->
# Resources
- [Integrate an external service](https://github.com/department-of-veterans-affairs/devops/tree/master/docs/External%20Service%20Integrations)
- [Email address endpoint PR](https://github.com/department-of-veterans-affairs/vets-api/pull/1718)
- [Email address Betamocks config PR](https://github.com/department-of-veterans-affairs/vets-api/pull/1746)
- [Email address Betamocks recording PR](https://github.com/department-of-veterans-affairs/vets-api-mockdata/pull/13)
- [Setup Swagger locally](https://github.com/department-of-veterans-affairs/vets-api/tree/master/app/swagger)
- [Setup Betamocks](https://github.com/department-of-veterans-affairs/vets-api/blob/master/docs/setup/betamocks.md)
- [vets-api-mockdata readme](https://github.com/department-of-veterans-affairs/vets-api-mockdata/blob/master/README.md)
- [Endpoint Punch List](https://github.com/department-of-veterans-affairs/va.gov-vfs-teams/blob/master/DeveloperDocs/vets-api/vets-api-endpoint-punch-list.md)
---
<!-- .slide: data-background="#efefef" -->
# Questions?
---
<!-- .slide: data-background="#efefef" -->
# Q & A Takeaways
- get the API correct, collaborate with the architects
- dealing smartly and proactively with the error edge cases
- insight into how the middleware is being instrumented, and references to them
- alphabetize the Swagger API endpoints
- automate the inclusion of the files in the apidocs controller
---
<!-- .slide: data-background="#2a9a40" -->
# Thanks!
{"metaMigratedAt":"2023-06-14T23:10:07.347Z","metaMigratedFrom":"YAML","title":"Endpoint Punch List","breaks":true,"slideOptions":"{\"transition\":\"slide\",\"slideNumber\":true}","contributors":"[{\"id\":\"cfd49ea5-0b12-4a5b-b434-aca65469d74c\",\"add\":35211,\"del\":25924}]"}