The crash you will hit without defaults
UrlFetchApp.fetch returns an HTTPResponse object. You call getContentText() on it, hand that string to JSON.parse, and get a plain JavaScript object back. Destructuring that top-level object is fine. The problem is one level down.
If the API response omits the address field entirely, data.address is undefined. When V8 tries to evaluate { city, country } = undefined, it throws TypeError: Cannot destructure property 'city' of undefined. The run dies, the Sheet row goes unwritten, and the error is reported against the destructuring line, not the fetch, which makes it confusing the first time you hit it.
The fix is a default value in the destructuring pattern itself: { address: { city, country } = {} } = data. Now if address is absent, the right-hand side of that sub-pattern falls back to {}, city and country both land as undefined, and the rest of the function runs.