рдЫрд┐рдкрд╛рдПрдБ рдФрд░ рддрд▓рд╛рд╢ рдХрд░реЗрдВ: рдХреЛрдб рдЬреЗрдирд░реЗрд╢рди рдмрдирд╛рдо JSON

рдпрд╣ рд╕реЛрдЪрдиреЗ рдореЗрдВ рдбрд░рд╛рд╡рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рджрд╕ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╕рдмрд╕реЗ рдлреНрд░реАрд▓рд╛рдВрд╕ рдЖрд░рдкреАрд╕реА рдХреА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЬреАрд╡рди рдореЗрдВ рдПрдХ рдкреВрд░реА рдЫреБрдЯреНрдЯреА рдереАред рдПрдХ рджрд░реНрджрдирд╛рдХ рдФрд░ рд▓рдВрдмреА рдЫреБрдЯреНрдЯреА, рдШреЛрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рджреА рдХреА рддрд░рд╣: рдлреВрд▓реЛрдВ рдореЗрдВ рдПрдХ рд╕рд┐рд░, рд╕рд╛рдмреБрди рдореЗрдВ рдПрдХ рдкреАрдаред рдпрд╣ рдмрд╣реБрдд рд╣реА рдЖрдХрд░реНрд╖рдХ рдерд╛ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЦрдбрд╝реА рдереАред рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рдХрд▓реНрдк рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдерд╛ред рдореИрдВ DCOM рдпрд╛ CORBA рдЬреИрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рд░рд╛рдХреНрд╖рд╕реА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдкрд░рд┐рд╡рд╣рди рд╕реНрддрд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдорддреМрд░ рдкрд░ рд▓рдВрдмреА рджрд╛рдврд╝реА рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдерд╛ред

рд╣рдорд╛рд░реЗ рдЦреБрд╢ рд╕рдордп рдореЗрдВ, рдПрдХ рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд╛ рдЬреАрд╡рди рдЖрд╕рд╛рди рдФрд░ рд╕реБрдЦрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд░рд┐рд╡рд╣рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрди рдЧрдпрд╛ рд╣реИред RPC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЖрд╕рд╛рди: рд╣рдо рдЕрдкрд╛рдЪреЗ рдереНрд░рд┐рдлреНрдЯ рд╣реЛрд▓рд╕реНрдЯрд░ рдпрд╛ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм Google рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд╝рд░реНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдХреГрдкрдпрд╛, рдиреНрдпреВрдирддрдо рдорд╕реНрддрд┐рд╖реНрдХ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЗ рд╕рд╛рде, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рджреЛрдиреЛрдВ рддреИрдпрд╛рд░ рд╣реИрдВред AppStore рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдореВрд▓ рд░реВрдк рд╕реЗ рджреЗрд╢реА рдХрдХреНрд╖рд╛рдУрдВ рд╕реЗ рд╕реБрдЦрдж рд░реИрдкрд░ рдореЗрдВ, рдФрд░ рдПрдХ рд╣реА рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗред рд╡рд╣ рд╕рдм рд╣реИред

рд▓реЗрдХрд┐рдиред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдПрдХ рд╕рд╛рде рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдереНрд░рд┐рдлреНрдЯ рдФрд░ рдкреНрд░реЛрдЯреЛрдмреЙрдлрд╝ рджреЛрдиреЛрдВ рдХреЛ рддреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдРрд╕рд╛ рднрд╛рдЧреНрдп рдЕрдХреНрд╕рд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреИрд░рд┐рдпрд░ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рднрд╛рд╡рдирд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦрд┐рдд рдФрд░ рд╣рдореЗрдВ рджрд┐рдП рдЧрдП рдвреЗрд░ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреВрдареЗ рддрд░реАрдХреЗ рд╕реЗ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╕рдм рдХреБрдЫ рдЙрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рджрд╕ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдерд╛, рдФрд░ рдЕрдХреНрд╕рд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХреА рд╕рднреА рдЗрдЪреНрдЫрд╛рдПрдВ рдЫреЛрдЯреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдореЗрдВ REST + JSON рдХреЗ рдиреАрдЪреЗ рдЖрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрдереНрдп рдорд╛рдирдХреАрдХрд░рдг рдереНрд░рд┐рдлреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЦрд░рд╛рдм рдХрд┐рдП рдЧрдП рд╡реНрдпрдХреНрддрд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИред рдЯрд╛рдЗрдкрд┐рдВрдЧ рдирд╣реАрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рдПрдХ рдкреВрд░реА рддреБрд▓рдирд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЛрдб рдореЗрдВ рдердХрд╛рдК рдиреАрд░рд╕ рдЬрд╛рдВрдЪ рд╣реЛрддреА рд╣реИред рдмреЗрд╢рдХ, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдорд╛рдиреНрдпрддрд╛ рджреА рдЧрдИ рдереА, рдФрд░ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, JSON рдХреЗ рдкрд╛рд░рджрд░реНрд╢реА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреЗ рд▓рд┐рдП, рдмреЗрд╢рдХ, рдПрдХ рд░реЗрд╕реНрдЯрдХрд┐рдЯ рд╕рдВрдпреЛрдЬрди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╕рднреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдореИрдк рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛ рдореЗрд░реЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЕрдиреБрдЧреНрд░рд╣ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдмрд╛рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░рд┐рдпреЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдХреЗ рд▓рд┐рдП рдЖрдЬрдорд╛рдпрд╛ рдерд╛, рдФрд░ рднреА рдмрджрддрд░ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯрд┐рди рдХреЗ рд╕рд╛рде рдХреБрдЫ JsonPack рдПрдХ рдирд┐рд░рдВрддрд░ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рдирдИ рдЖрдИ-рдлреНрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдЪреБрдирд╛, рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд╛рдВрдЪ рдЕрд▓рдЧ-рдЕрд▓рдЧ REST рдЬреИрд╕реА рд╕реЗрд╡рд╛рдУрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА, рджреЛрдиреЛрдВ рджреЗрд╢реА рдФрд░ рдмрд╛рд╣рд░реА, рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рд╛рде рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛, рджрд╛рдВрддреЗрджрд╛рд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдФрд░ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╡рд░рдгред рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЕрд╕рд╣рдиреАрдп рдерд╛ред рд╕рд╛рде рд╣реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ред рдЬреАрд╡рди рдмрд╣реБрдд рдХрдо рд╣реИ рдЗрд╕реЗ рдирд┐рд░реНрдмрд╛рдз рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдХрдмреНрдЬрд╛ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рджрд┐рди рдЦреЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдлрд┐рд░ рдкрд╛рдВрдЪ рдорд┐рдирдЯ рдореЗрдВ рдЙрдбрд╝рд╛рди рднрд░реЗрдВред рддреАрди рджрд┐рди рдмрд╛рдж, ifacegen рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдХреЛрдб, рднреЛрд▓рд╛, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдХреБрдЫ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ред

Ifacegen рдХреНрдпрд╛ рд╣реИ?

рдпрд╣ рдПрдХ рд╕рд░рд▓ рдХрдВрд╕реЛрд▓ рдЯреВрд▓ (рдЕрдЬрдЧрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рд╣реИ рдЬреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЖрдИрдбреАрдПрд▓ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХрдХреНрд╖рд╛рдПрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореВрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ JSON рдХреЗ рд╕рдорд╛рди рд╣реИред рдпреЗ рд╡рд░реНрдЧ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ JSON рдореЗрдВ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, ifacegen рдкрд╛рд░рджрд░реНрд╢реА рд╕реЗрд╡рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдкрд░ рдХрдХреНрд╖рд╛рдПрдВ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ?

ifacegen рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдереНрд░рд┐рдлреНрдЯ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ REST + JSON API рд▓реЗрдиреЗ рдФрд░ JSON рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ REST рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдЧрдд рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдЦреАрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддреЗ рд╣реИрдВ рдХреЗрд╡рд▓ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдХреГрддрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЙрддреНрдкрдиреНрди рдХреЛрдб рд╕рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИред

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?

ifacegen рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ JSON рдореЗрдВ рдордирдорд╛рдиреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдФрд░ рдордХреНрдЦреА рдкрд░ рдХрд┐рд╕реА рднреА JSON рд╕реЗ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рд░рдирдЯрд╛рдЗрдо, рдХреЗрд╡рд▓ рдХреЙрдореНрдк рдЯрд╛рдЗрдо, рдХреЗрд╡рд▓ рдХрдЯреНрдЯрд░ред рдХреЛрдИ NSCoder рдирд╣реАрдВред рдФрд░ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЕрдиреНрдп рднрд╛рд╖рд╛ рдирд╣реАрдВред

рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдХрд┐рддрдирд╛ рдЬрдЯрд┐рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИред ifacegen рдиреЗ рдиреЗрд╕реНрдЯреЗрдб рдбрд┐рдХреНрд╢рдирд░реАрдЬ, рдПрд░реЗрдЬ рдХреЛ рдбрд┐рдХреНрд▓реЗрдпрд░ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдРрдХреНрд╕реЗрд╕ рдСрдл рдЕрд░реЗрдХреНрд╕реЗрд╕ (рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╢рдмреНрджрдХреЛрд╖, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ)ред рд╢рдмреНрджрдХреЛрд╢ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд╢рдмреНрджрдХреЛрд╢ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдлрд╝реАрд▓реНрдб (@property) рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВред IDL рдкрд░рдорд╛рдгреБ рддрддреНрд╡ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ: int32, int64, double, string, bool, raw рдФрд░ rawstrред рд░реЙ рдПрдХ рдордирдорд╛рдирд╛ рдбрд┐рдХреНрд╢рдирд░реА рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдЯрд╛рдЗрдк NS NS рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреЙрдкреА рдХреА рдЬрд╛рддреА рд╣реИ, рд░реЙрд╕реНрдЯреНрд░реИрд╕реНрдЯ рднреА рдПрдХ рдордирдорд╛рдирд╛ рдбрд┐рдХреНрд╢рдирд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЗрдирдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: "{\"weird\":42,\"str\":\"yes\"}" ред

рдпрд╣ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ?

IDL рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ (рдФрд░ рд╣рд╛рдВ, рд╡рд┐рд╡рд░рдг рднрд╛рд╖рд╛ рд╕реНрд╡рдпрдВ рдкреВрд░реНрдг JSON рд╣реИ)ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП Google Places API рдкрд░ рдЬрд╛рдПрдВред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдкреНрд░рд▓реЗрдЦрди рд╕реЗрд╡рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рднреВ-рдмрд┐рдВрджреБ рдХрд╛ рд╡рд░реНрдгрди рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ :
 "geometry" : { "location" : { "lat" : -33.8583790, "lng" : 151.2100270 } } 

ifacegen IDL рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рдЗрд╕реЗ рд╢рдмреНрджрд╢рдГ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдорд╛рд░реНрдХрдЕрдк рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рдлрд╝реАрд▓реНрдб рдирд╛рдо рдФрд░ рдЙрдирдХреЗ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЛ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред "рдЖрдИрдбреА" рдФрд░ "рд╢реВрдиреНрдп" рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдирдпрд╛", "рдЖрд╡рдВрдЯрд┐рдд", "рдХреЙрдкреА" рдФрд░ "рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп" рдирд╛рдо рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реАрд▓реНрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрд╕рд░реНрдЧ "" рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдХреЛрдб рдореЗрдВ рдШреЛрд╖рдгрд╛рдУрдВ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рди рд╣реЛред рд╕рднреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдПрдХ рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред "iface":
 {"iface": [ { "struct":"GoogleGeometry", "typedef" : { "location" : { "lat" : "double", "lng" : "double" } } } } 

рдпрд╣ рдЖрд╕рд╛рди рдХреЛрдб рдкреАрдврд╝реА рдХрд╛ рд╕рдордп рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдордиреЗ GoogleClient.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ IDL рдШреЛрд╖рдгрд╛рдПрдБ рдбрд╛рд▓ рджреА рд╣реИрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 $ python ifacegen.py GoogleClient.json 

рдирддреАрдЬрддрди, рд╣рдореЗрдВ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ: GoogleClient.h рдФрд░ GoogleClient.mред рд╢реАрд░реНрд╖рд▓реЗрдЦ рдореЗрдВ рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШреЛрд╖рдгрд╛рдПрдБ рд╣реЛрдВрдЧреА:
 @interface GoogleGeometryLocation: NSObject @property (nonatomic) double_t lat; @property (nonatomic) double_t lng; @end; @interface GoogleGeometry: NSObject - (NSData*)dumpWithError:(NSError* __autoreleasing*)error; - (id)initWithLocation:(GoogleGeometryLocation*)location; - (id)initWithDictionary:(NSDictionary*)dictionary error:(NSError* __autoreleasing*)error; - (id)initWithJSONData:(NSData*)jsonData error:(NSError* __autoreleasing*)error; @property (nonatomic) GoogleGeometryLocation* location; @end; 

рд╕рднреА рдиреЗрд╕реНрдЯреЗрдб рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рд░рд▓ рдХрдХреНрд╖рд╛рдПрдВ рднреА рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛рдПрдВрдЧреАред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдХреНрд░рдорд╛рдВрдХрди / deserialization рддрд░реАрдХреЗ рд╣реЛрдВрдЧреЗ, рдЕрдиреНрдпрдерд╛ рдЬрдирд░реЗрдЯрд░ рдХреЛрдб рдкреНрд░рдлреБрд▓реНрд▓рд┐рдд рд╣реЛрдЧрд╛ред рдмреЗрд╢рдХ, рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рдПрдХ рдордирдорд╛рдирд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдм рдЬрд╣рд╛рдБ рднреА JSON рд╕реНрдирд┐рдкреЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдмрд╕ рдЙрд╕рдХрд╛ рдирд╛рдо рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ:

 { "struct":"GoogleLocation", "typedef" : { "lat" : "double", "lng" : "double" } }, { "struct":"GoogleGeometry", "typedef" : { "location" : "GoogleLocation" } } 

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдШреЛрд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЕрдиреБрдЧрдорди рд╕рдорд░реНрдерд┐рдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдЪрд╛рдирдХ GoogleLocation рдХреЗ рдЙрдиреНрдирдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрд╣ рд╡рд╛рд░рд┐рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
 { "struct":"GoogleLocationEx", "extends": "GoogleLocation", "typedef" : { "elv" : "double" } } 

рдЖрдк рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдШреЛрд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЖрдпрд╛рдд рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпреЗ рдореЙрдбреНрдпреВрд▓ рд╕реНрд░реЛрдд рдХреЗ рд╕рдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЦреЛрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рдЖрдпрд╛рдд рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдХреЛрдб рдкреАрдврд╝реА рдирд╣реАрдВ рд╣реЛрдЧреА, рдмрд╕ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЪреВрд╕рдирд╛ рд╣реЛрдЧрд╛ред
 {"iface": [ { "import": "OtherModule.json" } ... 


рдареАрдХ рд╣реИ, рдпреЗ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВред рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдлрд┐рд░ рд╕реЗ, Google Places API рдкрд░ рдЬрд╛рдПрдВред рдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреЙрд▓ рдХрд░реЗрдВ: рд╕реНрдерд╛рди рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА ред рдЗрд╕рдХрд╛ URL рдЗрд╕ рддрд░рд╣ рд╣реИ:
maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
  maps.googleapis.com/maps/api/place/details/json? 
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
  maps.googleapis.com/maps/api/place/details/json? 
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
  maps.googleapis.com/maps/api/place/details/json? 
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
  maps.googleapis.com/maps/api/place/details/json? 
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git

maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git

maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
  maps.googleapis.com/maps/api/place/details/json? 
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
  maps.googleapis.com/maps/api/place/details/json? 
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
  maps.googleapis.com/maps/api/place/details/json? 
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git

maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git

maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git

maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git

maps.googleapis.com/maps/api/place/details/json?
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git
  maps.googleapis.com/maps/api/place/details/json? 
, , JSON. GoogleDetailsResult , :
{ "procedure": "placeDetails", "prefix": "place/details/json", "prerequest": { "key":"string", "reference": "string", "sensor": "string", "language": "string" }, "request" : {}, "response": "GoogleDetailsResult" }

prefix , . prerequest , URL ( RFC 3986 ), request JSON, . . . ┬л┬╗ ( ):
- (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error;
:
GoogleDetailsResult* result = [self.google placeDetailsWithKey:key andReference:ref andSensor:@"true" andLanguage:locale andError:&error];

Objective-C : GoogleClient.m - (GoogleDetailsResult*)placeDetailsWithKey:(NSString*)key andReference:(NSString*)reference andSensor:(NSString*)sensor andLanguage:(NSString*)language andError:(NSError* __autoreleasing*)error { id tmp; [transport setRequestParams:@{ @"key" : NULLABLE(key), @"reference" : NULLABLE(reference), @"sensor" : NULLABLE(sensor), @"language" : NULLABLE(language) }]; if ( ![transport writeAll:nil prefix:@"/place/details/json" error:error] ) { return nil; } NSData* outputData = [transport readAll]; if ( outputData == nil ) { return nil; } NSDictionary* output = [NSJSONSerialization JSONObjectWithData:outputData options:NSJSONReadingAllowFragments error:error]; if ( *error != nil ) { return nil; } GoogleDetailsResult* GoogleDetailsResult235; GoogleDetailsResult235 = [GoogleDetailsResult new]; GooglePlaceDetails* GooglePlaceDetails236; NSDictionary* outputResult237 = [output objectForKey:@"result"]; if ( outputResult237 != nil && ![outputResult237 isEqual:[NSNull null]]) { GooglePlaceDetails236 = [GooglePlaceDetails new]; NSArray* outputResult237Address_components238 = [outputResult237 objectForKey:@"address_components"]; NSMutableArray* address_components4; if ( outputResult237Address_components238 != nil && ![outputResult237Address_components238 isEqual:[NSNull null]]) { address_components4 = [NSMutableArray arrayWithCapacity:[outputResult237Address_components238 count]]; for ( id item in outputResult237Address_components238) { GoogleAddressComponent* GoogleAddressComponent239; GoogleAddressComponent239 = [GoogleAddressComponent new]; GoogleAddressComponent239.longName = ( tmp = [item objectForKey:@"long_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); GoogleAddressComponent239.shortName = ( tmp = [item objectForKey:@"short_name"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); NSArray* itemTypes240 = [item objectForKey:@"types"]; NSMutableArray* types7; if ( itemTypes240 != nil && ![itemTypes240 isEqual:[NSNull null]]) { types7 = [NSMutableArray arrayWithCapacity:[itemTypes240 count]]; for ( id item in itemTypes240) { [types7 addObject:item]; } } GoogleAddressComponent239.types = types7; [address_components4 addObject:GoogleAddressComponent239]; } } GooglePlaceDetails236.addressComponents = address_components4; // ... GoogleDetailsResult235.result = GooglePlaceDetails236; GoogleDetailsResult235.status = ( tmp = [output objectForKey:@"status"], [tmp isEqual:[NSNull null]] ? nil : (NSString*)tmp ); return GoogleDetailsResult235; }


? . , IFTransport:
@protocol IFTransport - (void)setRequestParams:(NSDictionary*)params; - (BOOL)writeAll:(NSData*)data prefix:(NSString*)prefix error:(NSError* __autoreleasing*)error; - (NSData*)readAll; @end
IFHTTPTransport, NSURLConnection HTTP(S). JSON-, POST. тАФ GET. HTTP 200 202 , NSError . URL- -, IFHTTPTransport (Protected). :
- (NSMutableURLRequest*)prepareRequestWithURL:(NSURL*)url data:(NSData*)data; - (NSString*)buildRequestParamsString:(NSDictionary*)requestParams; - (BOOL)shouldBreakOnError:(NSError*)error;

IFTransport . . , , . , , .

RPC- :
NSURL* googleURL = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api"]; id<IFTransport> transport = [[IFHTTPTransport alloc] initWithURL:googleURL]; self.google = [[google alloc] initWithTransport:transport];

? , , . : -, ARC, . -, NSJSONSerialization, . , ifacegen . , python , .

: , , . . , . , , .

: prerequest "string" , . , . IDL, -.

? Bitbucket. IDL. .
$ git clone https://bitbucket.org/ifreefree/ifacegen.git

Source: https://habr.com/ru/post/In213697/


All Articles