рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рд╡рд┐рдХрд╛рд╕ рдЯреАрдореЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛рдо рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╣рдо рдХреИрд╕реЗ рднрд╛рдЧреЗ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд▓реЗрдЦред рд╣рдорд╛рд░реА рдЯреАрдореЛрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдереНрд░рд┐рдлрд╝реНрдЯ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ред
рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛, рдФрд░ рд╣рдордиреЗ рдЬреЛ "рд╕рд╛рдЗрдб" рдЗрдлреЗрдХреНрдЯ рдкрдХрдбрд╝реЗ, рдХреГрдкрдпрд╛ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рджреЗрдЦреЗрдВред
рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕
2017 рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЬрдм рд╣рдордиреЗ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХреА, рддреЛ рд╣рдордиреЗ EmberJS рдХреЛ рджреГрд╢реНрдпрдкрдЯрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ред рдЬреЛ, рд▓рдЧрднрдЧ рд╕реНрд╡рддрдГ рд╣реА рд╣рдореЗрдВ REST рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рднрд╛рдЧреЛрдВ рдХреА рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐
EmberData рдмреИрдХрдПрдВрдб рдФрд░ рдлреНрд░рдВрдЯрдПрдВрдб рдХрдорд╛рдВрдб рдХреЗ рдХрд╛рдо рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдбреЗрдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ "рдкреНрд░реЛрдЯреЛрдХреЙрд▓" рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдм рдХреБрдЫ рдареАрдХ рдерд╛ - рдПрдореНрдмрд░ рдиреЗ рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЕрдиреБрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХреАред рд╕рд░реНрд╡рд░ рдореЙрдбрд▓ рдХреЗ рдЕрдиреБрдХрд░рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝реНрдпреВрдЪрд░-рдлрд╝рд╛рдЗрд▓реНрд╕ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдЧрд░ рдХрд╣реАрдВ рд╣рдордиреЗ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рддреЛ рдореИрдВ рдПрдореНрдмрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдПрдореНрдмрд░ рд╣рдореЗрдВ рдкрд╛рд╕ рдХреЗ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╣реИрдВрдбрд▓рд░ рдПрдореБрд▓реЗрдЯрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ рдПрдХ рд╕рдордЭреМрддрд╛ рдерд╛ рдХрд┐ рдмреИрдХрдПрдВрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдк-рдЯреВ-рдбреЗрдЯ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЬрдм рд╕рдм рдХреБрдЫ "рд╕рдордЭреМрддреЛрдВ" рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдФрд░ рдЙрдирдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИ), рд╡рд╣ рдХреНрд╖рдг рдЖрддрд╛ рд╣реИ рдЬрдм "рдЧрд▓рдд рд╣реИ"ред
рдирдИ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдиреЗ рди рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдирдП рдбреЗрдЯрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛, рдмрд▓реНрдХрд┐ рдкреБрд░рд╛рдиреЗ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ред рдЕрдВрдд рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдЕрдиреБрдХрд░рдг рдкрд░ рдмрд╕ рдорд╣рдВрдЧрд╛ рд╣реЛ рдЧрдпрд╛ред рдЕрдм, рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдХрд╛ рд╡рд┐рдХрд╛рд╕, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рд░реНрд╡рд░ рд╕реНрдЯрдм рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рд╡рд┐рдХрд╛рд╕ рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЯреАрдо рдХреЗ рдХрд╛рдо рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рдордп рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рдХрд╛рд╕
рдЕрдм рд╣рдо EmberJS рдХреЛ VueJS рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЫреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдкреНрд░рд╡рд╛рд╕ рдХреЗ рдирд┐рд░реНрдгрдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдордиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХреАред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдирджрдВрдб рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ:
- рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛
- "рд╕рд░реНрд╡рд░ рдХреЗ рдмрд┐рдирд╛" рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдлреНрд░рдВрдЯрдПрдВрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╕реБрд╡рд┐рдзрд╛
- рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗ рдПрдкреАрдЖрдИ рд╡рд┐рд╡рд░рдг рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛
- рдЖрд╕рд╛рди рдХреЙрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди
- рд╕реНрдкрд╖реНрдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд┐рд╡рд░рдг
- рдлреНрд░рдВрдЯрдПрдВрдб рдФрд░ рдмреИрдХрдПрдВрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреЛрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реЛрдзрди рдореЗрдВ рдЖрд╕рд╛рдиреА
- рдЕрдзрд┐рдХрддрдо рд╕реНрд╡рд╛рдпрддреНрддрддрд╛
- рдордЬрдмреВрдд рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдПрдкреАрдЖрдИ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИрдВред рдпрд╛рдиреА рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рддрдереНрдп рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдкрддрд╛ рд▓рдЧрд╛рдирд╛
- рд╕рд░реНрд╡рд░ рд▓реЙрдЬрд┐рдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА
- рддрдореНрдмреВрд░реЗ рдХреЗ рд╕рд╛рде рдиреГрддреНрдп рдХреЗ рдмрд┐рдирд╛ рд╕рд░реНрд╡рд░ рдХреА рдУрд░ рд╕реЗ рд╡рд╕рдВрдд рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдгред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж
рдереНрд░рд┐рдлреНрдЯ рдкрд░ рд░реБрдХрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдПрдкреАрдЖрдИ рд╡рд┐рд╡рд░рдг рднрд╛рд╖рд╛ рдорд┐рд▓реАред
namespace java ru.company.api namespace php ru.company.api namespace javascrip ru.company.api const string DIRECTORY_SERVICE= "directoryService" exception ObjectNotFoundException{ } struct AdvBreed { 1: string id, 2: string name, 3: optional string title } service DirectoryService { list<AdvBreed> loadBreeds() AdsBreed getAdvBreedById(1: string id) }
рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП, рд╣рдо TMultiplexedProcessor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, TServlet рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн, TJSONProtocol рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдЗрд╕ рдереНрд░рд┐рдлреНрдЯ рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдиреГрддреНрдп рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╕рд░реНрд╡рд▓реЗрдЯ рдореЗрдВ рдПрдХ рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рдирд╛ рдФрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдерд╛ред
@Component class ThriftRegister : ApplicationListener<ContextRefreshedEvent>, ApplicationContextAware, ServletContextAware { companion object { private const val unsecureAreaUrlPattern = "/api/v2/thrift-ns" private const val secureAreaUrlPattern = "/api/v2/thrift" } private var inited = false private lateinit var appContext:ApplicationContext private lateinit var servletContext:ServletContext override fun onApplicationEvent(event: ContextRefreshedEvent) { if (!inited) { initServletsAndFilters() inited = true } } private fun initServletsAndFilters() { registerOpenAreaServletAndFilter() registerSecureAreaServletAndFilter() } private fun registerSecureAreaServletAndFilter() { registerServletAndFilter(SecureAreaServlet::class.java, SecureAreaThriftFilter::class.java, secureAreaUrlPattern) } private fun registerOpenAreaServletAndFilter() { registerServletAndFilter(UnsecureAreaServlet::class.java, UnsecureAreaThriftFilter::class.java, unsecureAreaUrlPattern) } private fun registerServletAndFilter(servletClass:Class<out Servlet>, filterClass:Class<out Filter>, pattern:String) { val servletBean = appContext.getBean(servletClass) val addServlet = servletContext.addServlet(servletClass.simpleName, servletBean) addServlet.setLoadOnStartup(1) addServlet.addMapping(pattern) val filterBean = appContext.getBean(filterClass) val addFilter = servletContext.addFilter(filterClass.simpleName, filterBean) addFilter.addMappingForUrlPatterns(null, true, pattern) } override fun setApplicationContext(applicationContext: ApplicationContext) { appContext = applicationContext } override fun setServletContext(context: ServletContext) { this.servletContext = context } }
рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдХреЛрдб рдореЗрдВ, рджреЛ рд╕реЗрд╡рд╛ рдХреНрд╖реЗрддреНрд░ рдмрдирддреЗ рд╣реИрдВред рд╕рдВрд░рдХреНрд╖рд┐рдд, рдЬреЛ "/ рдПрдкреАрдЖрдИ / рд╡реА 2 / рдереНрд░рд┐рдлреНрдЯ" рдкрддреЗ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдФрд░ рдЦреБрд▓рд╛, "/ рдПрдкреА / рд╡реА 2 / рдереНрд░рд┐рдлреНрдЯ-рдПрдирдПрд╕" рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреБрдХреАрдЬрд╝ рджреНрд╡рд╛рд░рд╛ рд╕реЗрд╡рд╛ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдкрд░, рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирддрд╛ рд╣реИ рдЬреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдРрд╕реА рд╡рд╕реНрддреБ рдХреЛ рдмрдирд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рддреЛ 401 рддреНрд░реБрдЯрд┐ рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдУрд░ рд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣реБрдЖ рд╣реИ, рддреЛ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдХреБрдХреАрдЬрд╝ рднрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХреЗред
рдПрдХ рдирдИ рд╕реЗрд╡рд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
@Component class DirectoryServiceProcessor @Autowired constructor(handler: DirectoryService.Iface): DirectoryService.Processor<DirectoryService.Iface>(handler)
рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ
@Component class SecureMultiplexingProcessor @Autowired constructor(dsProcessor: DirectoryServiceProcessor) : TMultiplexedProcessor() }
рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рдВрд▓рдЧреНрди рдХрд░рдХреЗ рдХреЛрдб рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдПрдХ рдбрд┐рдЬрд╛рдЗрдирд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХреБрдВрдЬреА рдХреЗ рдореВрд▓реНрдп рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдЦреБрдж рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рджреЗ рджреЗрдЧрд╛ред
"рдиреЛ рд╕рд░реНрд╡рд░" рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИред рдлреНрд░рдВрдЯреЗрдВрдб рднрд╛рдЧ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ рдХрд┐ рд╡реЗ рдПрдХ PHP рд╕реНрдЯрдм рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рд╡реЗ рд╕реНрд╡рдпрдВ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рд╡реЗ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░реНрд╡рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдм рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдореБрдЦреНрдп рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдереНрд░рд┐рдлреНрдЯ-рдкреНрд▓рдЧрдЗрди рд╣реИред
import store from '../../store' import { UNAUTHORIZED } from '../../store/actions/auth' const thrift = require('thrift') export default { install (Vue, options) { const DirectoryService = require('./gen-nodejs/DirectoryService') let _options = { transport: thrift.TBufferedTransport, protocol: thrift.TJSONProtocol, path: '/api/v2/thrift', https: location.protocol === 'https:' } let _optionsOpen = { ... } const XHRConnectionError = (_status) => { if (_status === 0) { .... } else if (_status >= 400) { if (_status === 401) { store.dispatch(UNAUTHORIZED) } ... } } let bufers = {} thrift.XHRConnection.prototype.flush = function () { var self = this if (this.url === undefined || this.url === '') { return this.send_buf } var xreq = this.getXmlHttpRequestObject() if (xreq.overrideMimeType) { xreq.overrideMimeType('application/json') } xreq.onreadystatechange = function () { if (this.readyState === 4) { if (this.status === 200) { self.setRecvBuffer(this.responseText) } else { if (this.status === 404 || this.status >= 500) {... } else {... } } } } xreq.open('POST', this.url, true) Object.keys(this.headers).forEach(function (headerKey) { xreq.setRequestHeader(headerKey, self.headers[headerKey]) }) if (process.env.NODE_ENV === 'development') { let sendBuf = JSON.parse(this.send_buf) bufers[sendBuf[3]] = this.send_buf xreq.seqid = sendBuf[3] } xreq.send(this.send_buf) } const mp = new thrift.Multiplexer() const connectionHostName = process.env.THRIFT_HOST ? process.env.THRIFT_HOST : location.hostname const connectionPort = process.env.THRIFT_PORT ? process.env.THRIFT_PORT : location.port const connection = thrift.createXHRConnection(connectionHostName, connectionPort, _options) const connectionOpen = thrift.createXHRConnection(connectionHostName, connectionPort, _optionsOpen) Vue.prototype.$ThriftPlugin = { DirectoryService: mp.createClient('directoryService', DirectoryService, connectionOpen), } } }
рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрддреНрдкрдиреНрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕рд░реНрд╡рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
thriftPlugin.DirectoryService.loadBreeds() .then(_response => { ... }) .catch(error => { ... }) })
рдпрд╣рд╛рдБ рдореИрдВ рдЦреБрдж VueJS рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛, рдЬрд╣рд╛рдВ рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рд░рдЦрдирд╛ рд╕рд╣реА рд╣реИред рдЗрд╕ рдХреЛрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдЕрдВрджрд░ рдФрд░ рд░реВрдЯ рджреЛрдиреЛрдВ рдХреЗ рдЕрдВрджрд░ рдФрд░ Vuex-action рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдХреБрдЫ рд╕реАрдорд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдВрддрд░рд┐рдХ рдереНрд░рд┐рдлрд╝ рдПрдХреАрдХрд░рдг рд╕реЗ рдорд╛рдирд╕рд┐рдХ рдкреНрд░рд╡рд╛рд╕ рдХреЗ рдмрд╛рдж рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреЛ рдирд╣реАрдВ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдзреНрд╡рдЬ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрд╕ рдорд╛рди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ред
- рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓рдВрдмреЗ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдкреВрд░реНрдгрд╛рдВрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рдирд┐рд╖реНрдХрд░реНрд╖
рдереНрд░рд┐рдлреНрдЯ рдХреЗ рд╕рдВрдХреНрд░рдордг рдиреЗ рд╣рдореЗрдВ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд╡реИрд╢реНрд╡рд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред
рдЙрд╕реА рд╕рдордп, рдЕрддрд┐рд░рд┐рдХреНрдд рдмреЛрдирд╕ рдХреЗ рд╕рд╛рде, рдПрдкреАрдЖрдИ рдХреЗ рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕рдЦреНрдд рдбреЗрдЯрд╛ рд╕реАрд░рд┐рдпрд▓рд▓рд╛рдЗрдЬрд╝реЗрд╢рди / рдбреАрд╕рд░реНрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдирд┐рдпрдореЛрдВ рдХреЗ рдХрд╛рд░рдг, рд╣рдордиреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдмрд╛рддрдЪреАрдд рдХреЗ рд╕рдордп рдореЗрдВ ~ 30% рдХреА рд╡реГрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХреА (рдЬрдм REST рдФрд░ THRIFT рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╛рди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреА рдЧрдИ) рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛)