There's a couple of pretty decent answers up already. Here's my take.
Couple of Basic Assumptions
I'll try and keep the use of magic only in construction and forging capacities. This way, your actual defense is non-magical, yet magic-aided, which is part of the objectives identified in the question. I've also assumed the physical laws of this world to be at least quasi realistic. For instance, you might have big flying dragons in this world, but some limitations of a big flying creature in the real world are also assumed to be suffered by the dragons, and so on.
The best defense against an airborne attack lies in
1) Effective scouting system and a quick warning mechanism
2) Strong deterrents to airborne attackers
Everything about the city, presuming a competent anti-air defense is high on its priority list, would have be oriented towards the above points. I'm going to touch upon City Layout and Location, Scouting, Warning, Defending Forces and Infrastructure.
Location of the City
The most defensible positions in typical siege warfare are usually at a high ground, surrounded by mountains with difficult approaches. This will not work against airborne attackers, it may indeed assist them.
You see, the larger a flying creature is, the more effort it requires just to get airborne i.e. just to take off. Various large birds therefore prefer high altitude nesting points because of this very reason. So if we're looking at anything threateningly large enough attacking the city, we should be aware this weakness exists. Therefore, a city surrounded by mountains is the last thing we need. If at all we want a city in the mountains, let it then be dug into the mountain, in which case our problem is solved.
So the city is out on dry plains, or preferably in the desert. In such a case, if an airborne attack of any dangerously sized flying beasts occurs, there are some huge advantages:
These creatures will expend substantial energy reaching your city since it would (hopefully) not be around a habitat that they typically inhabit (or are bred in).
The humans/intelligent humanoids riding these creatures would also typically be travelling a long distance.
The creatures cannot readily land and take off without substantial expenditure of energy. This is critical because:
There is limited food in the dry plains and deserts. Unless the flying army invading your city is packed for a long siege, these animals will need to be fed. A flying dragon will eat a lot of food (and I mean a LOT).
So it is not easy to land and take off and doing so takes up energy, which can't readily be replenished because the environment is not easy to live in.
Layout and Plan of the City
The level of technology appears to be strictly medieval. Another ground rule appears to be that the city can't be underground. But we can magically reinforce things. Okay that can work.
The city would have to be circular, and strictly controlled in terms of size. The walls or the city are high, like the-Wall-in-a-Song-of-Ice-and-Fire high. An iron net hangs from these walls over the city, magically reinforced and nigh unbreakable. Mirrors hang from the net, to make sure enough sunlight gets into the city.
The shape of the city is circular to ensure that no section of the city grows too far away from the center, where we have a magically reinforced bunker.
The bunker has food supplies, a well for water, enough holes for air circulation, and can house the entire city's population in systematically divided sections for a large period of time. How long? You decide, depending on what kind of tension you want to create in case of a siege.
Last but not the least, a complex network of hidden bunkers surrounds the city for the next big ingredient of a good defense...
Scouting
The bunkers are two-man posts, one man operating a magically enhanced looking glass (telescope). The looking glass has special lenses that can zoom in and detect body heat. The second man operates a series of communication devices. Whistles, mirrors, lanterns, or even arrows with letters tied to them. Depending on the weather and conditions, a message can be conveyed from one bunker to another double quick time using one method or another.
These bunkers are within shooting (shortbow) distance of each other. They're mostly underground and invisible to the unsuspecting eye. Anytime an attacker (whether on land or air-borne) approaches, the messages are relayed from bunker to bunker and sent up the walls.
Defenses and Tactics
Remember the walls which are very very high? Like the-air-is-fucking-thin-up-here-wheres-my-oxygen-tank high. These walls are punctuated by long range ballistae and other powerful projectile launchers. A crack team of commandos man these walls. They're trained at high altitudes from a young age and specialize in anti-air tactics. Complementing the anti-air weaponry is a division of griffin riders whose job it is to keep the attacking force away from the anti-air weapons.
All personnel's arms and armor are obviously enhanced by magic, capable of withstanding damage and dishing out even more.
Of course, this is all predicated on the wall holding. All of this is for nothing if the dragons (or wyverns or wyrms or what not) are able to burrow through the wall. In fact, then your griffins and special commandos are helplessly trapped outside as the enemy wreaks havoc on your city. Therefore, the wall being magically impregnable is critical.
One last tactic: Each citizen and soldier of the city for generations has been having a highly poisonous root everyday in limited quantities. The population has now developed a very very high resistance to it, to the extent that they're practically immune. Anyone else, would have an instant internal organ failure. More importantly, now the poison of this root has rendered these people contaminated game. Anyone (or thing) that eats a person from this city is bound to be poisoned instantly. Everytime a dragon or a wyvern bites off the head of your griffin rider, it goes down too.
Of course any successful siege defense will also rely on your awareness of the enemy's capabilities. If you know a hippogryff can do serious melee damage in the air, don't send your griffins too close while your anti-air division rips it to shreds. If you know a dragon can set your siege weapons ablaze, make sure your griffins are harassing it non-stop. Arrows, bolts, ballista ammo could be laced with paralytic poison so that even glancing wounds are debilitating.
In Conclusion: How you want it to go
So, suppose a large army of dragons attacks. If the system works, your scouting system has let you know in advance, allowing for at least a limited level of preparedness. Your weapons are locked and loaded, griffins fed and mounted, citizens stowed away in the safety bunkers.
Now its just about fighting off the waves of enemies. After the first assault the dragons will presumably want to refill on energy and strength. They'll have to land somewhere close to the city, probably close enough that your scouting bunkers will keep you posted about their activities. Now they gotta feed these beasts, then send them flying all the way to the top of the wall again. All this while you're well aware where they are, when they're going to strike and how much food they're left with.
I therefore believe the system laid out fulfills the objectives we've identified, i.e. early and effective warning system; and a strong deterrent to attackers.
Hope this was interesting! Let know what you thought :)