We're using the third option and it works very well. We're slightly different in that our backend teams builds the API, then documents it in OpenApi and then our frontend team runs a generator on the openapi, consumes it and 'blindly' trusts it. But openapi has a lot of generators so would definitely be feasible to generate your rest apis with it as well.
Personally, I like this approach because your documentation becomes your source of truth. It will be particularly helpful if you plan on exposing your APIs for third-parties to consume because you will know your docs will need to be up to date for your app to work.