JSON-RPC API рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА

рдЬрдм рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ microservice рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХрд╛ рдПрдкреАрдЖрдИ JSON-RPC рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ json рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЬрд┐рддрдирд╛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдорд╛рдВрдЧ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рд╕реЗрд╡рд╛ рд╕реЗ рдЬрд╡рд╛рдм рдорд┐рд▓рд╛:

{ "result": 12, "id": 46929734, "jsonrpc": "2.0" } 

рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЬрд╛рдВрдЪрдирд╛ рд╣реИ:

  1. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ jsonrpc рддрддреНрд╡ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдорд╛рди 2.0 рд╣реЛрддрд╛ рд╣реИ
  2. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдЖрдИрдбреА рддрддреНрд╡ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдорд╛рди рдЕрдиреБрд░реЛрдз рдореЗрдВ рдкрд╛рд░рд┐рдд рдПрдХ рд╕рдорд╛рди рддрддреНрд╡ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд▓рд╣рд╛рд▓ рдмрддрд╛ рджреЗрдВ рдХрд┐ рдпрд╣ 46929734 рд╣реИ

рдЙрддреНрддрд░ рдореЗрдВ рддрддреНрд╡ "рдкрд░рд┐рдгрд╛рдо" рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдорд╛рди 12 рд╣реЛрддрд╛ рд╣реИ


Java + TestNG + Gson рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ:

 Assert.assertTrue(response.has("result")); Assert.assertTrue(response.has("jsonrpc")); Assert.assertTrue(response.has("id")); Assert.assertTrue(response.get("result").isJsonPrimitive()); Assert.assertTrue(response.get("jsonrpc").isJsonPrimitive()); Assert.assertTrue(response.get("id").isJsonPrimitive()); Assert.assertEquals(response.get("result").getAsInt(), 12); Assert.assertEquals(response.get("jsonrpc").getAsString(), "2.0"); Assert.assertEquals(response.get("id").getAsInt(), 46929734); 

рдЗрд╕ рд╕рдордп, рд╕рд╡рд╛рд▓ "рдХреНрдпреЛрдВ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рджрд╛рд╡реЗ рд╣реИрдВ?" рдорди рдореЗрдВ рдмрдирдирд╛ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрдм рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рддреАрди рдЕрднрд┐рдХрдердиреЛрдВ рдХреЗ рд╕рдореВрд╣ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╡реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рдЬреЛрдВрд╕ рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рд╡реЗ рдкрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЙрддреНрддрд░ рдЙрдореНрдореАрджреЛрдВ рдкрд░ рдЦрд░рд╛ рдЙрддрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ? рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЧрд┐рд░рдиреЗ рдХреЗ рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

  1. рдЙрддреНрддрд░ ->
     { "result": 12, "id": 46929734, "jsonrpc": "1.0" } 

    TestNG рд╕реЗ рддреНрд░реБрдЯрд┐ -> java.lang.AssertionError: рдЕрдкреЗрдХреНрд╖рд┐рдд [2.0] рд▓реЗрдХрд┐рди рдкрд╛рдпрд╛ рдЧрдпрд╛ [1.0]
    рдЙрдиреНрд╣реЛрдВрдиреЗ "2.0" рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛, "1.0" рдорд┐рд▓рд╛ - рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред
  2. рдЙрддреНрддрд░ ->
     { "result": 12, "id": 46929734, "jsonrpc": {} } 

    TestNG рд╕реЗ рддреНрд░реБрдЯрд┐ -> java.lang.UnsupportedOperationException: JsonObject

    рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рддрддреНрд╡ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ рдереАред
  3. рдЙрддреНрддрд░ ->

     { "result": 12, "id": 46929734 } 

    TestNG рд╕реЗ рддреНрд░реБрдЯрд┐ -> java.lang.NullPointerException
    рд╣рдордиреЗ рдПрдХ рддрддреНрд╡ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрддрд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

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

рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдИ рдЪреЗрдХ, рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрджреНрдпрддрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдорд░реНрдерди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдиреЗ рдореБрдЭреЗ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдВрдЪреЛрдВ рдХреЛ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, json рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрддреНрд░ рдХрд┐рдпрд╛ред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрд░реЛрдХреНрдд рдЬреЛрдВрд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╡рд░реЗрдЬ рдФрд░ рдбрд┐рдЯреЗрд▓ рдХреЗ рд╕рдорд╛рди рд╕реНрддрд░ рдХреЛ рдиреМ рдХреЗ рдмрдЬрд╛рдп рддреАрди рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 Gassert.verifyInteger(response, "result", 12); Gassert.verifyString(response, "jsonrpc", "2.0"); Gassert.verifyInteger(response, "id", 46929734); 

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

  • рдореВрд▓реНрдп рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдмрд┐рдирд╛ рдФрд░ рдмрд┐рдирд╛, рд╕рднреА рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рддрддреНрд╡, рдиреЗрд╕реНрдЯреЗрдб рдФрд░ рдирд╣реАрдВ
  • JsonObject, рдиреЗрд╕реНрдЯреЗрдб рдФрд░ рдирд╣реАрдВ, рдореВрд▓реНрдп рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛
  • JsonArray, рдиреЗрд╕реНрдЯреЗрдб рдФрд░ рдирд╣реАрдВ, рдореВрд▓реНрдп рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛
  • JsonNull рддрддреНрд╡реЛрдВ рдиреЗ рдиреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдФрд░ рдирд╣реАрдВ
  • рддрддреНрд╡ рдПрдХ рд╕рд░рдгреА рдХреЗ рдЕрдВрджрд░
  • рдЕрдкреЗрдХреНрд╖рд┐рдд рддрддреНрд╡ рд╕рд░рдгреА рдХреА рд╕рд╛рдордЧреНрд░реА
  • рд╕рд░рдгреА рдЖрдпрд╛рдо
  • рд╡рд╕реНрддреБ рдЖрдпрд╛рдо

рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рднреА рд╕реНрддрд░реЛрдВ рдкрд░, рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ рдЬреЛ TestNG рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрддрди рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░рдгреЛрдВ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

  1. рдЙрддреНрддрд░ ->
     { "result": 12, "id": 46929734, "jsonrpc": "1.0" } 

    Gassert рд╕реЗ рддреНрд░реБрдЯрд┐ -> java.lang.AssertionError: рддрддреНрд╡ [jsonrpc] рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдлрд▓ред рдЕрдкреЗрдХреНрд╖рд┐рдд [реи.реж] рд▓реЗрдХрд┐рди рдкрд╛рдпрд╛ [рез.реж]
  2. рдЙрддреНрддрд░ ->

     { "result": 12, "id": 46929734, "jsonrpc": {} } 

    рдЧреИрд╕рд░реНрдЯ рд╕реЗ рддреНрд░реБрдЯрд┐ -> java.lang.AssertionError: рддрддреНрд╡ [jsonrpc] рдПрдХ JsonPrimitive рдирд╣реАрдВ рд╣реИред [рд╕рдЪ] рдЦреЛрдЬрдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХреА рд▓реЗрдХрд┐рди рдкрд╛рдпрд╛ [рдЭреВрдареА]
  3. рдЙрддреНрддрд░ ->

     { "result": 12, "id": 46929734 } 

    рдЧреИрд╕рд░реНрдЯ рд╕реЗ рддреНрд░реБрдЯрд┐ -> java.lang.AssertionError: Json рдореЗрдВ рддрддреНрд╡ рдирд╣реАрдВ рд╣реИ: [json.pc]ред [рд╕рдЪ] рдЦреЛрдЬрдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХреА рд▓реЗрдХрд┐рди рдкрд╛рдпрд╛ [рдЭреВрдареА]

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреЗрдХ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рдзрд┐рдпрд╛рдБ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИрдВ, рдЬреЛ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рдкрд╛рда рдореЗрдВ рдПрдХ рдЬреЛрд░рджрд╛рд░ рдЧрд┐рд░рд╛рд╡рдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреНрд░реБрдЯрд┐ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╛ рдЕрдиреБрд░реЛрдз + рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкреВрд░рд╛ рд╢рд░реАрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧрд┐рддреБрдм рднрдВрдбрд╛рд░ рдореЗрдВ рд╣реИ, рдФрд░ рдорд╛рд╡реЗрди рднрдВрдбрд╛рд░ рдореЗрдВ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

Maven
Github
APIDocs

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


All Articles