{"id":345,"date":"2020-05-19T13:23:45","date_gmt":"2020-05-19T13:23:45","guid":{"rendered":"https:\/\/startersites.io\/blocksy\/app\/?p=345"},"modified":"2025-01-09T13:40:32","modified_gmt":"2025-01-09T13:40:32","slug":"get-started-using-fintx-quickly","status":"publish","type":"post","link":"https:\/\/fintx.dev\/?p=345","title":{"rendered":"FintX Quickstart Guide"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Before we start<\/h2>\n\n\n\n<p>Before getting started, make sure you have a running gRPC service. If the gRPC service does not have <em>Reflection Service<\/em> enabled, make sure you have the <code>proto <\/code>file that contains the service definition<\/p>\n\n\n\n<p>For this tutorial we&#8217;ll be using the sample Northwind gRPC service. The code for this service can be found on github at <a href=\"https:\/\/github.com\/namigop\/FintX\/tree\/main\/source\/Tefin.Grpc.Sample\">https:\/\/github.com\/namigop\/FintX\/tree\/main\/source\/Tefin.Grpc.Sample<\/a> . The proto file containing the service definitions is in the <code>source\/Protos<\/code> sub folder. Below is a snippet of the proto file showing the service and its 6 methods<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"service NorthwindService {\n  \/\/ GetOrderById retrieves a single order by its ID\n  rpc GetOrderById(OrderRequest) returns (Order) {}\n\n  \/\/ GetOrdersByCustomer streams all orders for a given customer\n  rpc GetOrdersByCustomer(CustomerRequest) returns (stream Order) {}\n\n  \/\/ GetCustomers retrieves all customers\n  rpc GetCustomers(CustomersRequest) returns (CustomersResponse) {}\n\n  \/\/ UpdateOrderStatus allows bidirectional streaming of order status updates\n  rpc UpdateOrderStatus(stream OrderStatusUpdate) returns (stream OrderStatusResponse) {}\n\n  \/\/ AddOrderDetails allows streaming multiple order details for batch processing\n  rpc AddOrderDetails(stream OrderDetail) returns (OrderDetailsResponse) {}\n\n  \/\/ SubmitOrder creates a new order with all its details\n  rpc SubmitOrder(SubmitOrderRequest) returns (SubmitOrderResponse) {}\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9\">service<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">NorthwindService<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/ GetOrderById retrieves a single order by its ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">rpc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GetOrderById<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #D8DEE9\">OrderRequest<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #88C0D0\">returns<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #D8DEE9\">Order<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #ECEFF4\">{}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/ GetOrdersByCustomer streams all orders for a given customer<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">rpc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GetOrdersByCustomer<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #D8DEE9\">CustomerRequest<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #88C0D0\">returns<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #D8DEE9\">stream<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Order<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #ECEFF4\">{}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/ GetCustomers retrieves all customers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">rpc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GetCustomers<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #D8DEE9\">CustomersRequest<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #88C0D0\">returns<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #D8DEE9\">CustomersResponse<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #ECEFF4\">{}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/ UpdateOrderStatus allows bidirectional streaming of order status updates<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">rpc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">UpdateOrderStatus<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #D8DEE9\">stream<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">OrderStatusUpdate<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #88C0D0\">returns<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #D8DEE9\">stream<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">OrderStatusResponse<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #ECEFF4\">{}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/ AddOrderDetails allows streaming multiple order details for batch processing<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">rpc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">AddOrderDetails<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #D8DEE9\">stream<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">OrderDetail<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #88C0D0\">returns<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #D8DEE9\">OrderDetailsResponse<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #ECEFF4\">{}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/ SubmitOrder creates a new order with all its details<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">rpc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">SubmitOrder<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #D8DEE9\">SubmitOrderRequest<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #88C0D0\">returns<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #D8DEE9\">SubmitOrderResponse<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #ECEFF4\">{}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Let&#8217;s start<\/h2>\n\n\n\n<p>Take the gRPC Northwind Service and start it.  Once it&#8217;s up follow the steps below<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Create a gRPC client<\/h3>\n\n\n\n<p>Run FintX.exe and then click on the <code>Add Client<\/code> button to bring up the dialog below. <br><img fetchpriority=\"high\" decoding=\"async\" width=\"500\" height=\"453\" class=\"wp-image-2411\" style=\"width: 500px;\" src=\"https:\/\/fintx.dev\/wp-content\/uploads\/2020\/05\/AddClient_ViaReflectionService.png\" alt=\"\" srcset=\"https:\/\/fintx.dev\/wp-content\/uploads\/2020\/05\/AddClient_ViaReflectionService.png 559w, https:\/\/fintx.dev\/wp-content\/uploads\/2020\/05\/AddClient_ViaReflectionService-300x272.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select Reflection Service (or proto file)<\/li>\n\n\n\n<li>If you selected Reflection Server, enter the URL of the gRPC service<\/li>\n\n\n\n<li>If the URL is hosting multiple gRPC services, select the one that you would like to test<\/li>\n\n\n\n<li>Enter a name for this client<\/li>\n\n\n\n<li>Optionally, add a description.<\/li>\n\n\n\n<li>Now click the <strong>Okay <\/strong>button. FintX will generate code for the gRPC client and compile it. Once it&#8217;s completed, it will show the generated gRPC methods<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Invoke a method<\/h3>\n\n\n\n<p>Once, the client is compiled and displayed in the UI, you can <code>double-click<\/code> on any method (or click the <code>Open In New Tab<\/code> button, which shows up after selecting the method )<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d50aba07622&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d50aba07622\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"665\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/fintx.dev\/wp-content\/uploads\/2020\/05\/InvokeMethod_Unary_With_Steps-1024x665.png\" alt=\"\" class=\"wp-image-2416\" srcset=\"https:\/\/fintx.dev\/wp-content\/uploads\/2020\/05\/InvokeMethod_Unary_With_Steps-1024x665.png 1024w, https:\/\/fintx.dev\/wp-content\/uploads\/2020\/05\/InvokeMethod_Unary_With_Steps-300x195.png 300w, https:\/\/fintx.dev\/wp-content\/uploads\/2020\/05\/InvokeMethod_Unary_With_Steps-768x499.png 768w, https:\/\/fintx.dev\/wp-content\/uploads\/2020\/05\/InvokeMethod_Unary_With_Steps-600x390.png 600w, https:\/\/fintx.dev\/wp-content\/uploads\/2020\/05\/InvokeMethod_Unary_With_Steps.png 1344w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select a method<\/li>\n\n\n\n<li>Double click on any node in the object tree to edit its value<\/li>\n\n\n\n<li>Invoke the gRPC service!<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p>Calling gRPC services with FintX is super easy.  Just add a client, open the method, edit the request, and finally click the Send button to invoke the service!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Before we start Before getting started, make sure you have a running gRPC service. If the gRPC service does not have Reflection Service enabled, make sure you have the proto file that contains the service definition For this tutorial we&#8217;ll be using the sample Northwind gRPC service. The code for this service can be found [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[45],"tags":[],"class_list":["post-345","post","type-post","status-publish","format-standard","hentry","category-general"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[]}},"_links":{"self":[{"href":"https:\/\/fintx.dev\/index.php?rest_route=\/wp\/v2\/posts\/345","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fintx.dev\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fintx.dev\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fintx.dev\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fintx.dev\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=345"}],"version-history":[{"count":5,"href":"https:\/\/fintx.dev\/index.php?rest_route=\/wp\/v2\/posts\/345\/revisions"}],"predecessor-version":[{"id":2518,"href":"https:\/\/fintx.dev\/index.php?rest_route=\/wp\/v2\/posts\/345\/revisions\/2518"}],"wp:attachment":[{"href":"https:\/\/fintx.dev\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fintx.dev\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fintx.dev\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}