Apollo-link-rest: рддреНрд░реБрдЯрд┐ рдЬрдм REST рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЦрд╛рд▓реА рд╣реЛрддреА рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдордИ 2018  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: apollographql/apollo-link-rest


рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдЕрдиреБрд░реЛрдз рд╣реИ рдЬреЛ рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░ 204 "рдХреЛрдИ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ" рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдпреБрдЧреНрдорд┐рдд рд╣реЛрдиреЗ рдкрд░ рдореБрдЭреЗ рд▓рдЧрд╛рддрд╛рд░ рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ: JSON рдЗрдирдкреБрдЯ рдХрд╛ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЕрдВрдд ред

рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-рд░реЗрд╕реНрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЦрд╛рд▓реА рд╢рд░реАрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрдо рдХрд░реЗрдВ? рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдореИрдВ рдПрдХ рд╢реЗрдпрд░рдкреЙрдЗрдВрдЯ рдЖрд░рдИрдПрд╕рдЯреА рдПрдкреАрдЖрдИ рд╕реЗ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЯреНрд╡рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-рд░реЗрд╕реНрдЯ рдХреЛ рдЦрд╛рд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ...

рдореЗрд░рд╛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреЙрд▓:

                  <Mutation mutation={M_WRITE_PROJECT_DETAILS}>
                    {(writeProjectDetails, { data }) => (
                      <Form.Button
                        content="Save"
                        onClick={() => {
                          const token = localStorage.getItem("token");
                          writeProjectDetails({
                            variables: {
                              projectId: project.Id,
                              input: {
                                __metadata: {
                                  type: "SP.Data.ProjectListItem"
                                },
                                Title: project.Title
                              }
                            },
                            context: {
                              headers: {
                                "X-RequestDigest": token,
                                "X-HTTP-Method": "MERGE",
                                "IF-MATCH": "*"
                              }
                            }
                          });
                        }}
                      />
                    )}
                  </Mutation>

рд╕рдВрдмрдВрдзрд┐рдд рдЬреАрдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА:

const M_WRITE_PROJECT_DETAILS = gql`
  mutation writeToSPList($projectId: String, $input: String) {
    writeToSPList(projectId: $projectId, input: $input)
      @rest(
        type: "Project"
        path: "/web/lists/GetByTitle('Projects')/items(:projectId)"
        method: "POST"
      ) {
      NoResponse
    }
  }
`;

"NoResponse" рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ _null_ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдлрд╝реАрд▓реНрдб рдХреЗ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рднреЗрдЬ рд╕рдХрддрд╛ ...

enhancementЁЯТб feature help wanted ЁЯЫа questionтЭФ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рд╢рд░реАрд░ рдХреА рдЕрдкрд╕реНрдЯреНрд░реАрдо рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ {} рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛

data: {
  __typename: "...",
  NoResponse: null,
}

рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ "рдХреНрдпрд╛ рджреЛрдиреЛрдВ рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?" рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм 204 рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦрдирд╛ рдФрд░ рд╣реЗрдбрд░ рдХреЛ рджреЗрдЦрдирд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм Content-Length рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ рдФрд░ 0 рддрдм рд╣рдо рдЗрд╕реЗ рдПрдХ рдЦрд╛рд▓реА рд╢рд░реАрд░ рдХреЗ рдПрдХ рдФрд░ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ Content-Type рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ рдерд╛, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдЬрдм рдЗрд╕реЗ json рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП рддреЛ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕ рд╣реЗрдбрд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рдиреА рд╣реИ рддреЛ рдЗрд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд bodySerializer рд╕рдорд╛рди responseSerializer рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦрд╛рд▓реА рд╢рд░реАрд░ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ 204 рдФрд░ рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИред

рд╕рднреА 18 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@isopterix - рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЕрднреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред -- рдореЗрд░рд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдлрд╝реЗрдЪ рдХреЛ рд░реИрдк рдХрд░реЗрдВ рдФрд░ рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝реЗрдЪ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ {} рд╕рд╛рде реирежрек рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╢рд░реАрд░ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ -- рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмреЗрд╣рддрд░ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд┐рдирд╛, рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдЖрдЬ!

@isopterix рдореИрдВрдиреЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рдПрдХ рдЦрд╛рд▓реА рд╢рд░реАрд░ рдХреЗ рд▓рд┐рдП рдЧреБрдЬрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рд╢рд░реАрд░ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрддрд╛ рд╣реИ рддреЛ response.json() {} рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд▓рд╛рдЗрд╡ рд╕реЗрдЯрдЕрдк рдореЗрдВ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХреА рд╕реЗ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд╣рд╛рдВ рд╣реЛрддреА рд╣реИ?

  describe('response parsing', () => {
    it('supports empty response bodies', async () => {
      expect.assertions(1);

      const link = new RestLink({ uri: '/api' });

      fetchMock.post('/api/posts', {
        status: 204,
        body: '',
      });

      const mutation = gql`
        mutation postEmptyResponse($input: String!) {
          newPost(input: $input)
            @rest(type: "Post", path: "/posts", method: "POST") {
            NoResponse
          }
        }
      `;
      const {data} = await makePromise<Result>(
        execute(link, {
          operationName: 'postEmptyResponse',
          query: mutation,
          variables: { input: 'Love apollo' },
        }),
      );

      expect(data).toEqual({
        newPost: {
          NoResponse: null,
          __typename: 'Post',
        }
      });
    });
  });

@isopterix рдиреЗ рдореЗрд░реА рдЖрдЦрд┐рд░реА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдХрднреА рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдо рдХреНрд╖рдорд╛рд╢реАрд▓ рд╣реИрдВред

рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдореИрдВ рдПрдХ рдЦрд╛рд▓реА рд╢рд░реАрд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд╕рд╛рде рджреЗрдЦрддрд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╢рд░реАрд░ рдореЗрдВ res.json() рдпрд╛ res.text() рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрд╢рд╛ рджреЛрдиреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рднреА рд╣реИ рдмреЗрдорд╛рдиреАред рдЕрдиреНрдпрдерд╛ рдХреЛрдИ Content-Length рд╢реАрд░реНрд╖рд▓реЗрдЦ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрдЧрд╛ред рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХреЗрд╡рд▓ JSON рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ Content-Type application/json , рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХрд▓реНрдкрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХреБрдЫ рдПрдкреАрдЖрдИ рд╕рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЦрд╛рд▓реА 204 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрд╕ рд╣реЗрдбрд░ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рдмрд╛рдХреА рд▓рд┐рдВрдХ 300 рд╕реЗ рдКрдкрд░ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдкрд░ networkError рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рдХреЗрд╡рд▓ 2xx рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореБрдарднреЗрдбрд╝ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

  • 200 рдареАрдХ
  • 201 рдмрдирд╛рдпрд╛ рдЧрдпрд╛
  • 202 рд╕реНрд╡реАрдХреГрдд
  • 204 рдХреЛрдИ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ
  • (рдЕрдиреНрдп рдореЗрдВ рд╕реЗ рдХреЛрдИ?)

204 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреЗрд╡рд▓ рдПрдХ рдЦрд╛рд▓реА рд╢рд░реАрд░ рдХреЗ рд▓рд┐рдП рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдпрд╣ рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ 204 рд╣реЛрдиреЗ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ {} рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛? рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╣реЛрдЧрд╛, рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЕрдзрд┐рдХ HTTP рдорд╛рдирдХ рдЕрдиреБрд░реВрдк рдмрдирд╛ рджреЗрдЧрд╛ рдЬреЛ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред

@fbartho рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрдЧреА? рдпрджрд┐ рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдпрд╛ рдЙрд╕рдХрд╛ рд╕рдВрдпреЛрдЬрди рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдкреАрдЖрд░ рдмрдирд╛рдКрдВрдЧрд╛ред

рд╢рд╛рдпрдж рдпрд╣рд╛рдБ рдХреЛрдИ рдмреАрдЪ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИ? рдХреНрдпрд╛ рджреЛрдиреЛрдВ рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ реирежрек рдХреЛ {} рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╣рд╛рдпрдХ рд╣реВрдВ, рдпрд╛ "рдирд▓" рдХреЗ рд░реВрдк рдореЗрдВ JSON рдореЗрдВ рдХреЛрдИ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрд░реНрде рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рд╢рд░реАрд░ рдХреА рдЕрдкрд╕реНрдЯреНрд░реАрдо рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ {} рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛

data: {
  __typename: "...",
  NoResponse: null,
}

рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ "рдХреНрдпрд╛ рджреЛрдиреЛрдВ рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?" рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм 204 рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦрдирд╛ рдФрд░ рд╣реЗрдбрд░ рдХреЛ рджреЗрдЦрдирд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм Content-Length рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ рдФрд░ 0 рддрдм рд╣рдо рдЗрд╕реЗ рдПрдХ рдЦрд╛рд▓реА рд╢рд░реАрд░ рдХреЗ рдПрдХ рдФрд░ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ Content-Type рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ рдерд╛, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдЬрдм рдЗрд╕реЗ json рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП рддреЛ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕ рд╣реЗрдбрд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рдиреА рд╣реИ рддреЛ рдЗрд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд bodySerializer рд╕рдорд╛рди responseSerializer рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦрд╛рд▓реА рд╢рд░реАрд░ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ 204 рдФрд░ рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИред

рдЕрдм рддрдХ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХреА рд╕рд▓рд╛рд╣ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдФрд░ 204 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝реЗрдЪ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдЪрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рдкрд╛рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реБрдИред рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реЛрдЧрд╛ред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдЕрднреА рднреА рд╕реАрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЬреЗрдПрд╕ рджреБрдирд┐рдпрд╛ рдХреЛ рдХреИрд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП ...

#111 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд┐рдХреНрд╕реНрдб!

рдорд┐рдард╛рдИ! рдЖрдкрдХрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рдЕрдм, рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рдЕрднреА рдмрд╛рдХреА рд╣реИ :) рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдареАрдХ рдмрд╛рдж, рдореИрдВ рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп SharePoint рд╕рд░реНрд╡рд░ рдХреЗ REST API рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ ... рдпрджрд┐ рдЖрдк рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ 200 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИ рдмрд┐рдирд╛ рд╢рд░реАрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ :)

рдХреНрдпрд╛ рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдпрджрд┐ "NoResponse" рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдмреЙрдбреА рдХрдВрдЯреЗрдВрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ? рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рдирд╣реАрдВ рд╣реВрдВ рддреЛ рдкреИрдЪ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ 204 рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред

@isopterix рдпрджрд┐ рд╕рд░реНрд╡рд░ Content-Length рдХреЛ рд╢реВрдиреНрдп рдкрд░ рдареАрдХ рд╕реЗ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ 200 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд░рд╛рджрд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рднреА рдЬрд╛рдВрдЪрдирд╛ рд╣реИред

рдЗрд╕реЗ рдПрдХ рд╕реНрдкрд┐рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реИрдВред

рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдЦрд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдлрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ? рдмрд┐рдирд╛ рд╕рд╛рдордЧреНрд░реА рд╡рд╛рд▓реЗ 200 рдХреА рддрд░рд╣?

рд╣рд╛рдБред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдлрд┐рдХреНрд╕ 204 рд╕реНрдерд┐рддрд┐ рдпрд╛ Content-Length: 0 рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Content-Length рд╣реЗрдбрд░ рдХреЗ рдмрд┐рдирд╛ 200 рдЦрд╛рд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдЪреЗрдХ рдХреЗ рд▓рд┐рдП рдмреЙрдбреА рдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@isopterix рдХреНрдпрд╛ рдЖрдк рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдореИрдВ рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдореБрдЭреЗ 200 рд╕реНрдерд┐рддрд┐ рдФрд░ Content-Length: 0 ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЕрднреА рднреА Network error: Unexpected end of JSON input ред рдореИрдВ рд╕рдВрд╕реНрдХрд░рдг 0.7.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ apollo-link-rest рдбреАрдмрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЦрд╛рд▓реА рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдореЗрд░рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реАрд░реНрд╖рд▓реЗрдЦ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ apollo-link-rest рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╕реНрддреБ рдореЗрдВ рд╣реЗрдбрд░ рдореЗрдВ рд╣реЗрд░рдлреЗрд░/рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ?

рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-рдмрд╛рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦ @dljcollette рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ! рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреА рдорджрдж рд╣реЛрдЧреА

рдореБрдЭреЗ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ

рдЦрд╛рд▓реА рд╢рд░реАрд░ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ 200 рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ?

@thomaszdxsn рдЗрд╕реЗ res.text() рдмрдЬрд╛рдп res.json() рдФрд░ JSON.parse() рд╕рд╛рде рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реИрдз JSON рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ JSON рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рдРрд╕рд╛ рдХреБрдЫ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреЛ рдмрджрд▓ рджреЗрдВ рддрд╛рдХрд┐ рдпрд╣ рд╢рд░реАрд░ рдХреЗ рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдкрд░ рдпрд╛ 200 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рдХрд╛рдп рдореЗрдВ рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рдмреНрджрд╛рд░реНрде рд░реВрдк рд╕реЗ рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдХреЛрдб 204 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЦрд╛рд▓реА JSON рдПрдиреНрдХреЛрдбреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рдХрд╛рдп рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд╡реИрдз JSON рд╣реИред

рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдЖрдк рдПрдХ рдХрд╕реНрдЯрдо fetch рдлрд╝рдВрдХреНрд╢рди рдХреЛ apollo-link-rest рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдЕрдВрддрддрдГ рдПрдПрд▓рдЖрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░ рд╕рдХрддреЗ рдереЗред рдпрд╣ рдПрдХ рд╣реИрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╛, рдлрд┐рд░ рд╕реЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ Content-length: 0 рд╢реАрд░реНрд╖рд▓реЗрдЦ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

karensg picture karensg  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

i-Hun picture i-Hun  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sinisterra picture sinisterra  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dphaener picture dphaener  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lextas picture lextas  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ